sat*_*oru 7 python floating-point
为什么Python中的sys.maxint <(sys.maxint - 100 + 0.01)?
在具有 64 位长整型的系统上,sys.maxint是:
// decimal hexadecimal
9223372036854775807 0x7fffffffffffffff
Run Code Online (Sandbox Code Playgroud)
也是如此sys.maxint - 100:
9223372036854775707 0x7fffffffffffff9b
Run Code Online (Sandbox Code Playgroud)
加法0.01会强制该值在加法之前舍入为双精度浮点数。可以用双精度表示的两个最接近的值是:
9223372036854774784 0x7ffffffffffffc00
9223372036854775808 0x8000000000000000
Run Code Online (Sandbox Code Playgroud)
因为sys.maxint - 100更接近第二个(较大的)值,所以向上舍入。添加0.01给出:
9223372036854775808.01 0x8000000000000000.028f5c28f5c...
Run Code Online (Sandbox Code Playgroud)
它不能用双精度表示,因此再次四舍五入为:
9223372036854775808 0x8000000000000000
Run Code Online (Sandbox Code Playgroud)
所以 的值实际上sys.maxint - 100 + 0.01 大于的值sys.maxint。然而,在许多现代语言中,整数和浮点数之间的比较会强制在比较发生之前将整数值转换为浮点数;如果是 python 中的情况,sys.maxint将四舍五入为相同的值,并且它们比较相等。Python中似乎不是这样的。我不熟悉 python 数字的细节,但这是该语言的一个有趣的好奇心。
| 归档时间: |
|
| 查看次数: |
1411 次 |
| 最近记录: |