浮点数的存储采用的是近似的原理:
float存储格式为:
S E M
1位符号位 8位指数 23位尾数
转成数值即为:V=(-1)^S * 1.M * 2^(E-127)
对于16.5转成二进制为00010000.1==>1.00001*2^4,
那么在内存的表示为:
符号位 指数4+127 = 131 尾数
0 10000011 00001 000000000000000000
在转换过程中由于需要往右移位, 可见对于float数整数部分越大,小数部分的精度就越低
对float数来说有效数字约为7位(2^23约等于10^7),所以整数部分占的位数越多,小数部分
的精度就越低,当整数部分超过9999999后小数部分已经完全无精度了
要进行两个浮点数的比较智能设定容忍的区间大小:
计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如: