Python浮点数的总和

我试图在python 3中添加一些浮点值(从未在2中测试)并且我得到一些奇怪的结果,唯一的变化因素是求和中元素的顺序.

a = [-1e30, 1e30, 1, 3]
print(sum(a))   # return 4.0

a = [-1e30, 1, 3, 1e30]
print(sum(a))   # return 0.0

谁能告诉我我在这里想念的是什么?

提前致谢!

最佳答案
当你在做浮点数序列的总和时,你想使用math.fsum:

>>> a = [-1e30, 1e30, 1, 3]
>>> math.fsum(a)
4.0
>>> a = [-1e30, 1, 3, 1e30]
>>> math.fsum(a)
4.0

由于固有的精度问题,使用内置和不能为非常大(或小)的浮点数得到很好的答案.在What Every Computer Scientist Should Know About Floating-Point Arithmetic,您可以很好地了解血腥细节.

转载注明原文:Python浮点数的总和 - 代码日志