Java Math.exp()和Python math.exp()

时间:2017-03-23 22:30:14

标签: java python math exp

我对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));
    }
}

我发誓这些是等价的,但他们显然不是。我做错了什么?

1 个答案:

答案 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