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 次 |
| 最近记录: |