Java_语法基础_浮点数 近似存储

来源:互联网 发布:医院网站源码 编辑:程序博客网 时间:2024/05/08 16:17

我们知道,十进制的小数部分转换成计算机的二进制存储时,采用的是乘2取整法。直到积为1为止。例如,0.8125的转换过程如下。
0.8125*2=1.625 1
0.625*2=1.25 1
0.25*2=0.5 0
0.5*2=1 1
于是,二进制的结果为0.1101,也就是1.101*2^(-1),如果以float类型变量存储该值,只需占用23位有效位数中的3位就够了,其余位为0,结果为:
0 01111110 10100000000000000000000

我们来计算下小数值0.3,过程如下。
0.3*2=0.6 0
0.6*2=1.2 1
0.2*2=0.4 0
0.4*2=0.8 0
0.8*2=1.6 1
……
乘积的结果永远不为1,这也就意味着,该小数值不能准确地用二进制来表示,就算double类型有52位有效位数,依然不能准确存储,只能在精度上比23位有效位数的float类型更接近实际值而已。这也就是浮点类型数据不能够准确存储的原因。

0 0