我认为我对Numpy和小数字有疑问。您能帮我找到以下问题的解决方案:import numpy as npdef gaussian(xx, mu=0, sigma=1): return 1./(np.sqrt(2*np.pi)*sigma)*np.exp(-(mu-xx)**2/(2*sigma**2))factors = (1., 0.1, 0.01, 0.001, 0.0001)for factor in factors: xx = np.linspace(5000, 5200, 1000) yy = 1.-(factor*xx*(1.+gaussian(xx, 5100))) step = xx[1] - xx[0] print np.sum((1.-yy/(1.-factor*xx))*step)对于所有不同的-1,此代码应评估为factors。但是输出是:1.0 -1.000196116890.1 -1.001964636620.01 -1.02000000080.001 -1.243902453530.0001 1.04081641153所以问题在于,因子越小,我遇到麻烦的机会就越多,因为我认为这与Numpy / Python的精度有关。即使对于很小的因素,该如何评估方程呢?非常感谢您的提前帮助。 最佳答案 这不是NumPy的问题。您对结果应该为-1的期望是不正确的。您正在有效地计算函数f(x)在5100附近的较大间隔上的定积分。您要集成的功能简化为factor * x * gaussian(x) / (1 - factor * x)。我们可以轻松地对所使用因子的积分值进行包络估计:数量factor * x / (1 - factor * x)在整个感兴趣范围内变化相当缓慢,大约为5095到;对于超出此范围的任何东西,高斯将使贡献微不足道。因此,对于第一近似值,我们可以将该数量视为常数。然后,剩下的常数乘以5105的整数,这将足够接近gaussian(x)。因此,预期输出应在1的某个位置。 (但是,当factor * 5100 / (1 - factor * 5100)接近factor时,这种方法不能很好地工作。)因此,例如,在1 / 5100为factor的情况下,0.0001的值大约为factor * 5100 / (1 - factor * 5100)。这与您所看到的答案足够接近,因此可以证明NumPy或多或少在做正确的事情。关于python - numpy:如何避免舍入错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21638658/ 10-12 22:04