Pac*_*ier 9 java double casting long-integer
我知道有精确错误的怪异东西,但我无法理解,
为什么(long)9223372036854665200d
要给我9223372036854665216
?
NPE*_*NPE 34
9223372036854665200d
是类型的常量double
.但是,9223372036854665200
不适合double
不失精度.A double
只有52位的尾数,而有问题的数字需要63位才能准确表示.
最接近double
的9223372036854665200d
是尾数等于1.1111111111111111111111111111111111111111111110010100
二进制且其指数为63(十进制)的数字.这个号码就是9223372036854665216
(称之为U
).
如果我们将尾数减少一个等级1.1...0011
,我们得到9223372036854664192
(称之为L
).
原始数字介于L
和之间,U
并且U
比它更接近L
最后,如果你认为这个尾数的截断应该导致一个以一串零结尾的数字,那么你是对的.只有它发生在二进制,而不是十进制:U
在基16是0x7ffffffffffe5000
和L
是0x7ffffffffffe4c00
.
use*_*421 16
因为双打没那么精确.你为什么这么奇怪?将d更改为l.
归档时间: |
|
查看次数: |
718 次 |
最近记录: |