【发布时间】:2018-07-12 18:28:18
【问题描述】:
我在 python 中有以下数组
n = [565387674.45, 321772103.48,321772103.48, 214514735.66,214514735.65,
357524559.41]
如果我将所有这些元素相加,我会得到:
sum(n)
1995485912.1300004
但是,这个总和应该是:
1995485912.13
通过这种方式,我知道了浮点“错误”。我已经使用了 numpy 中的 isclose() 函数来检查更正的值,但是
这个限制是多少?有什么办法可以减少这种“错误”?
这里的主要问题是错误传播到其他操作,例如,以下断言必须为真:
assert (sum(n) - 1995485911) ** 100 - (1995485912.13 - 1995485911) ** 100 == 0.
【问题讨论】:
-
Python 有
math.fsum来计算“精确的浮点和”,但 its documentation 是模糊的。它通常比简单的串行加法返回更好的结果,但它并不总是以浮点格式返回可能的最佳结果。 -
谢谢,这个方法对我有用。
标签: python-3.x floating-point precision