Skip to main content
 首页 » 编程设计

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

2025年05月04日29落叶无声

我不太了解 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)); 
    } 
} 

我可以发誓它们是等效的,但它们显然不是。我做错了什么?

请您参考如下方法:

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。