1-0.99=?

作者: 遇见十年后的自己 | 来源:发表于2018-11-28 09:10 被阅读0次

1-0.99=?
下面我们来看一下代码:

public static void main(String[] args) {
double a=1;
double b=0.99;
System.out.println(a-b);
   }

真实的结果是0.010 00000 00000 00009。
解释:
关于精度损失的原理可以很简单的讲,首先一个正整数在计算机中表示使用01010形式表示的,浮点数也不例外。
比如11,11除以2等于5余1
5除以2等于2余1
2除以2等于1余0
1除以2等于0余1
所以11二进制表示为:1011。
double类型占8个字节,64位,第1位为符号位,后面11位是指数部分,剩余部分是有效数字。正整数除以2肯定会有个尽头的,之后二进制还原成十进制只需要乘以2即可。
举个例子:0.99用的有效数字部分,
0.99 * 2 = 1+0.98 --> 1
0.98 * 2 = 1+ 0.96 --> 1
0.96 * 2 = 1+0.92 -- >1
0.92 * 2 = 1+0.84 -- >1
...............
这样周而复始是没法有尽头的,而double有效数字有限,所以必定会有损失,所以二进制无法准确表示0.99,就像十进制无法准确表示1/3一样。

相关文章

  • 1-0.99=?

    1-0.99=?下面我们来看一下代码: 真实的结果是0.010 00000 00000 00009。解释:关于精度...

  • java和js等数据精度丢失问题

    大概所有学过计算机的同学都应该具备这样的基本常识: 1、0.1+0.2 不一定等于0.3(1-0.99同理不一定等...

网友评论

      本文标题:1-0.99=?

      本文链接:https://www.haomeiwen.com/subject/vcooqqtx.html