python – numpy.exponential略有不同的行为

我在两台不同的机器上安装了
Python3.6,分发Anaconda.我不能发誓我使用相同的安装程序文件,虽然我认为我做到了.当我尝试检查Python,Anaconda和numpy版本时,我看到了同样的情况:

《python – numpy.exponential略有不同的行为》

《python – numpy.exponential略有不同的行为》

我的数值差异很小.经过一些调试后,我成功地将问题减少到numpy.exp的调用.只是运行代码

import numpy as np

x = -0.1559828702879514361612223
y = np.exp(x)
print("The exponential of %0.25f is %0.25f" % (x, y))

我明白了

The exponential of -0.1559828702879514361612223 is 0.8555738459791129013609634

在第一台(‘服务器’)机器和

The exponential of -0.1559828702879514361612223 is 0.8555738459791127903386609

在第二台(“本地”)机器上.

我知道浮点数没有25位小数精度,但这些差异在我的代码中传播并发生在十二进制小数点附近.

可能是不同行为的原因是什么?

最佳答案 这不是关于NumPy的,而是关于浮点运算的结果与系统有关.通过使用math.exp,您可以在没有NumPy的情况下获得相同的结果.一个更简单的例子是

math.exp(2**(-53)) - 1

它在我的一台计算机上返回0,在另一台计算机上返回2.22e-16.这两个都是同样错误的,因为math.expm1(2 **( – 53))= 1.11e-16的计算证明了(顺便说一下,这就是函数expm1存在的原因).

在某种程度上,CPU依赖性对你有好处,清楚地表明两个系统之间不同的数字是毫无价值的.要关注的是安排计算以减少loss of significance.

点赞