使用Python时的浮点精度';s max()

使用Python时的浮点精度';s max(),python,floating-point,precision,floating-accuracy,Python,Floating Point,Precision,Floating Accuracy,为什么会这样 浮点数不编码精确值,而是近似值。结果基本上是与您输入的实数最接近的下一个浮点数 因为: >>> max(2, 2.01) 2.0099999999999998 这是浮点数的存储方式浮点舍入。它试图说2.01,但不能准确地表示为浮点数,因此它尽了最大努力。二进制表示的数字2.01是: >>> 2.01 2.0099999999999998 计算机仅使用有限数量的数字来存储浮点值,但2.01的二进制表示需要无限多个数字;因此,它四舍五入到最接近的

为什么会这样


浮点数不编码精确值,而是近似值。结果基本上是与您输入的实数最接近的下一个浮点数

因为:

>>> max(2, 2.01)
2.0099999999999998

这是浮点数的存储方式

浮点舍入。它试图说2.01,但不能准确地表示为浮点数,因此它尽了最大努力。

二进制表示的数字2.01是:

>>> 2.01
2.0099999999999998
计算机仅使用有限数量的数字来存储浮点值,但2.01的二进制表示需要无限多个数字;因此,它四舍五入到最接近的可表示值:

b10.00000010100011111100001010001111110000101000111111000010100011111100...
以十进制表示,此数字正好是:

b10.000000101000111111000010100011111100001010001111110
打印时,它会再次四舍五入到十七位小数,给出:

2.0099999999999997868371792719699442386627197265625

因为这就是浮点数的工作原理:看看StackOverflowThank。刚刚掌握了一些窍门。。
2.0099999999999998