我对Python知之甚少,但以下代码段结果为0.367879441171
from math import exp
window = 10000
td = 1
print exp(-td/window)
而在Java中,下面的代码段会产生0.9999000049998333
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
public class HelloWorld{
public static void main(String []args){
double td = 1d;
double window = 10000d;
System.out.println(Math.exp(- td / window));
}
}
我发誓这些是等价的,但他们显然不是。我做错了什么?
答案 0 :(得分:5)
python示例正在进行整数除法:
print -td/window
显示-1
。请注意,如果您使用int
变量编写了Java中的等效项,那么这与-1/10000
is zero:
int window = 10000;
int td = 1;
System.out.println(-td/window);
显示0
。
Python的行为让我感到惊讶,因为我从未注意到Python always rounds down,而不是我曾经看过的那样!
但是你在Java中没有完全相同,你已经划分了两个double
,这意味着你正在进行浮点除法。
在python中,尝试将td
转换为float:
print -float(td)/window
显示-0.0001
,类似于Java,您正在使用double
。