为什么计算顺序会影响浮点数求和的精度?
資深大佬 : Qzier 70
sum = 0 for i in range(1, 501): sum += 1 / i print(sum) sum = 0 for i in range(500, 0, -1): sum += 1 / i print(sum)
两种结果的精度为何不同?
6.79282342999052 6.7928234299905235
大佬有話說 (6)
sum = 0 for i in range(1, 501): sum += 1 / i print(sum) sum = 0 for i in range(500, 0, -1): sum += 1 / i print(sum)
两种结果的精度为何不同?
6.79282342999052 6.7928234299905235
>>> (1 + 0.0000000000000001) + 0.0000000000000001
1.0
>>> 1 + (0.0000000000000001 + 0.0000000000000001)
1.0000000000000002
至于为什么呢,因为
>>> 1 + 0.0000000000000001
1.0
>>> 1 + 0.0000000000000002
1.0000000000000002
简单来说,0.0000000000000001 加到 1 上之后就因为精度有限的关系被 discard 掉了;但是如果你先把两个 0.0000000000000001 合成一个 0.0000000000000002 再加到 1 上面,那么这个数字就会因为足够大而不会被 discard