python中为什么浮点计算不准确?
用户经常对这样的结果感到惊讶:
>>> 1.2-1.00.19999999999999996
并且认为这是 Python中的一个 bug。其实不是这样。这与 Python 关系不大,而与底层平台如何处理浮点数字关系更大。
CPython 中的 float
类型使用C语言的 double
类型进行存储。 float
对象的值是以固定的精度(通常为 53 位)存储的二进制浮点数,由于 Python 使用 C 操作,而后者依赖于处理器中的硬件实现来执行浮点运算。 这意味着就浮点运算而言,Python 的行为类似于许多流行的语言,包括 C 和 Java。
许多可以轻松地用十进制表示的数字不能用二进制浮点表示。例如,在输入以下语句后:
>>> x=1.2
为 x
存储的值是与十进制的值 1.2
(非常接近) 的近似值,但不完全等于它。 在典型的机器上,实际存储的值是:
1.0011001100110011001100110011001100110011001100110011(binary)
它对应于十进制数值:
1.1999999999999999555910790149937383830547332763671875(decimal)
典型的 53 位精度为 Python 浮点数提供了 15-16 位小数的精度。
要获得更完整的解释,请参阅 Python 教程中的 浮点算术 一章。
以上是 python中为什么浮点计算不准确? 的全部内容, 来源链接: utcz.com/z/520603.html