1

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

我可以发誓这些是等价的,但显然不是。我究竟做错了什么?

4

1 回答 1

5

python 示例进行整数除法:

print -td/window

显示-1。请注意,这与您在 Java 中使用int变量编写等效项不同,因为-1/10000它是零

int window = 10000;
int td = 1;
System.out.println(-td/window);

显示0

Python 的行为让我感到惊讶,因为我从来没有注意到Python 总是向下取整,但我从来没有看过!

但是你在 Java 中没有做完全一样的事情,你已经划分了两个doubles,这意味着你正在做浮点除法。

在 python 中,尝试转换td为浮点数:

print -float(td)/window

显示-0.0001,类似于 Java,您在其中使用double.

于 2017-03-23T22:35:17.790 回答