【发布时间】:2012-08-10 15:46:25
【问题描述】:
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> 4.2 - 1.8
2.4000000000000004
>>> 1.20 - 1.18
0.020000000000000018
>>> 5.1 - 4
1.0999999999999996
>>> 5 - 4
1
>>> 5.0 - 4.0
1.0
为什么 Python 的数学会出错?
【问题讨论】:
-
floating points 不涵盖所有实数,他们怎么可能?在任何非平凡的范围内,都有无限数量的实数(甚至是有理数),但只有有限数量的比特来表示它们。所以 python 的数学是正确的 - 对于浮点算术。
-
阅读此链接的第 14.1 节:docs.python.org/tutorial/floatingpoint.html
-
Python 数学没有错。您不了解计算机上浮点数的表示,也不了解这些数字的算术。阅读其他评论者建议的资源。
-
Python 数学 is 从数学上讲是错误的。只是一直完全正确在计算上是不可行的(像
sqrt(2)这样的数字甚至不能在有限的空间中表示,除非直接将它们编码为像sqrt(2)这样的东西)。 Python 的浮点运算中的错误已经被接受为“它的完成方式”很长一段时间了,我们只需要作为实用主义的问题来忍受。程序员意识到这一点非常重要,但我们都有这样的困惑。 -
所有删除投票者,请不要删除一个问题,该问题对遇到类似问题的用户来说是一个很好的路标