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
yexiaoxing 2020-01-23 00:34:47 +08:00 1
sum 本身也是个浮点数
|
2
msg7086 2020-01-23 01:08:16 +08:00 via Android
浮点计算每次都可能产生误差,计算顺序当然会影响结果了。
|
3
nalzok 2020-01-23 01:38:35 +08:00 1
考虑这个更简单的例子
>>> (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 |
4
Mutoo 2020-01-23 05:46:14 +08:00
误差主要来自无法用二进制精确表达的十进制。不同的累家顺序会导致这样的十进制出现的情况不同。
|