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

7 投票
3 回答
1519 浏览
提问于 2025-04-16 14:23

为什么在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的数字处理细节不太了解,但这是这个语言一个有趣的特性。

撰写回答