为什么在Python中sys.maxint < (sys.maxint - 100 + 0.01)?
为什么在Python中,sys.maxint小于(sys.maxint - 100 + 0.01)?
3 个回答
3
至少在我的电脑上不是这样。
In [7]: import sys
In [8]: sys.maxint < (sys.maxint - 100 + 0.01)
Out[8]: False
12
这可能是因为对于非常大的浮点数值,精度会丢失。(加上 0.01
会把右边的数变成浮点数)。
编辑:我试着想要准确解释这里发生了什么,但没能成功。所以我 发了个问题 来询问。
3
在一个使用64位长整型的系统中,sys.maxint
的值是:
// decimal hexadecimal
9223372036854775807 0x7fffffffffffffff
所以,sys.maxint - 100
的值是:
9223372036854775707 0x7fffffffffffff9b
当你加上0.01
时,这个值会被强制转换为双精度浮点数,然后再进行加法运算。双精度浮点数能表示的两个最接近的值是:
9223372036854774784 0x7ffffffffffffc00
9223372036854775808 0x8000000000000000
因为sys.maxint - 100
更接近第二个(较大的)值,所以它会向上舍入。加上0.01
后得到:
9223372036854775808.01 0x8000000000000000.028f5c28f5c...
这个值在双精度浮点数中是无法表示的,所以它又被舍入为:
9223372036854775808 0x8000000000000000
因此,sys.maxint - 100 + 0.01
的值实际上比sys.maxint
还要大。不过,在许多现代编程语言中,整数和浮点数之间的比较会强制将整数转换为浮点数,然后再进行比较;如果在Python中也是这样的话,sys.maxint
就会被舍入到同一个值,它们就会被认为是相等的。但看起来在Python中并不是这样。我对Python的数字处理细节不太了解,但这是这个语言一个有趣的特性。