为什么发生这个python数值错误?

时间:2016-11-11 23:30:03

标签: python-2.7 python-3.x

在数值稳定性方面发挥了一点作用,发现了这个:

>>> sum([1e4,1e20,-1e20])
16384.0

任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

前两个数字无法准确求和,因为Python的浮点表示不支持那么多有效十进制数字(它支持16位数,你的总和需要17才能准确表示)。 Python在尾数的最低有效部分用一个比特来近似答案。

添加第三个数字后得到的答案与您期望的答案之间的差异表示中间结果表示中的错误。在减法之后,尾数中的那一位就是剩下的;当指数被归一化时,你会留下16384.事实上它是两个提示你正在发生的事情。