为什么 (long)9223372036854665200d 给我 9223372036854665216?

2023-11-21

我知道一些带有精确误差的奇怪东西,但我无法理解,

Why is (long)9223372036854665200d给我9223372036854665216 ?


9223372036854665200d是类型常量double。然而,9223372036854665200不适合double且不损失精度。 Adouble只有 52 位尾数,而所讨论的数字需要 63 位才能准确表示。

最近的double to 9223372036854665200d是尾数等于的数字1.1111111111111111111111111111111111111111111110010100二进制形式,其指数为 63(十进制)。这个数字不是别人,正是9223372036854665216(叫它U).

如果我们将尾数减少一位1.1...0011,我们得到9223372036854664192(叫它L).

原来的数字在L and U并且更接近于U比它是L

最后,如果您认为尾数的截断应该产生一个以一堆零结尾的数字,那么您是对的。只发生在二进制中,而不是十进制中:U以 16 为基数是0x7ffffffffffe5000 and L is 0x7ffffffffffe4c00.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 (long)9223372036854665200d 给我 9223372036854665216? 的相关文章

随机推荐