我知道一些带有精确误差的奇怪东西,但我无法理解,
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(使用前将#替换为@)