标签归档:double

浮点数 为什么不能精确

一、float、double 在计算机中的存储方式:

我们知道计算机存储数据都是以二进制方式进行存储的,那么浮点数是怎么存储的呢?
比如二进制数101.11 就等于 1 * 2^2 +0 *2^1 + 1*2^0 + 1*2^-1 + 1*2^-2  = 4+0+1+1/2+1/4 = 5.75
下面的图展示了一个二进制小数的表达形式:
float-double-store
计算机对float与double类型都是将十进制数转换为二进制数再小数部分与指数部分分开存储,两者均使用自己独立的符号位,且由于二进制只为1或0,而一个二进制数必然可以设置成为1.XXX,其中X为0或1,所以该数可以默认为1.XXX,使用指数为控制整数部分,整数后面的自然就转换为了小数部分。
根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:
IEEE-v-sme
 (1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
 (2)M表示有效数字,大于等于1,小于2。
 (3)2^E表示指数位。

继续阅读

Advertisements