为什么sys.maxint< Python中的(sys.maxint - 100 + 0.01)?
答案 0 :(得分:12)
这可能是由于非常大的浮点值的精度损失。 (添加0.01
会将右侧转换为浮动)。
编辑:我试图对这里发生的事情做出准确的解释,但无济于事。所以我posted a question关于它。
答案 1 :(得分:3)
至少在我的机器上它不是
In [7]: import sys
In [8]: sys.maxint < (sys.maxint - 100 + 0.01)
Out[8]: False
答案 2 :(得分: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数字的细节,但这是一种有趣的语言好奇心。