【发布时间】:2020-08-04 20:58:39
【问题描述】:
>>> 1/3
0.3333333333333333
>>> 1/3+1/3+1/3
1.0
我不明白为什么这是 1.0。不应该是0.9999999999999999吗?
所以我想出了一个解决方案,python 有一个自动四舍五入的答案,但如果不是,以下结果无法解释......
>>> 1/3+1/3+1/3+1/3+1/3+1/3
1.9999999999999998
>>> (1/3+1/3+1/3)+(1/3+1/3+1/3)
2.0
我认为发生舍入错误是因为尾数中仅使用有限的位数,而指数(以浮点数表示)但 0.9999~~9 也没有超出位数的限制.. 有人能解释一下为什么会出现这样的结果吗?
【问题讨论】:
-
浮点加法不是关联的。安排计算的不同方式会产生不同的累积舍入误差。
-
@EricPostpischil:有。如果浮点加法是关联的,
1/3+1/3+1/3+1/3+1/3+1/3和(1/3+1/3+1/3)+(1/3+1/3+1/3)将是等效的。 -
也许你把关联性和交换性搞混了。关联性是允许您重新为表达式加上括号的属性。
标签: python floating-point rounding-error