加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么(长)9223372036854665200d给我922337203685466521

发布时间:2020-12-14 05:07:47 所属栏目:Java 来源:网络整理
导读:我知道精密错误的奇怪的东西,但我不能理解, 为什么(长)9223372036854665200d给我9223372036854665216? 解决方法 9223372036854665200d是double类型的常量.但是,9223372036854665200不适合双重而不损失精度.双重只有52位的尾数,而有问题的数字需要63位来精确
我知道精密错误的奇怪的东西,但我不能理解,

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

解决方法

9223372036854665200d是double类型的常量.但是,9223372036854665200不适合双重而不损失精度.双重只有52位的尾数,而有问题的数字需要63位来精确地表示.

最接近的9223372036854665200d的双数是二进制的尾数等于1.2222222222222222222222222222222222222222222220010100,其指数为63(十进制).这个号码是9223372036854665216(称为U).

如果我们将尾数减少到1.1 … 0011,我们得到9223372036854664192(称为L).

原始数字在L和U之间,并且比L更接近于U

最后,如果你认为这个截尾的尾数应该导致一个数字以一堆零结束,你是对的.只有它发生在二进制,而不是十进制:基16中的U是0x7ffffffffffe5000,L是0x7ffffffffffe4c00.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读