为什么sys.maxint< Python中的(sys.maxint - 100 + 0.01)?

时间:2011-03-25 07:55:14

标签: python floating-point

为什么sys.maxint< Python中的(sys.maxint - 100 + 0.01)?

3 个答案:

答案 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数字的细节,但这是一种有趣的语言好奇心。