站在巨人的肩膀上
分析
一个浮点数(Floating Point Number)由三个基本成分构成:
- 符号(Sign)
- 阶码(Exponent)
- 尾数(Mantissa)
通常,可以用下面的格式来表示浮点数:
其中 S 是符号位,P 是阶码,M 是尾数
对于 32 位的单精度浮点型如下:
可以看出,它有 1位符号位,8位指数,23位尾数
举例,对于 16.5(10)
对于10 进制的数字 16.5
表示成 2 进制为 00010000.1
表示成科学记数法 1.00001 × 2^4
又因为 Number = (-1)^S × 1.M × 2^(E-127)
即
S(2) = 0
P(10) = 127 + 4 = 131
M(2) = 0000 1000 0000 0000 0000 000
立即推:
P(2) = 1000 0011
那么在内存的表示为:
符号位 | 指数 | 尾数 |
---|---|---|
0 | 10000011 | 0000 1000 0000 0000 0000 000 |
结论
- 在转换过程中由于需要往右移位, 可见对于float数整数部分越大,小数部分的精度就越低
- 对float数来说有效数字约为7位(223约等于107),所以整数部分占的位数越多,小数部分的精度就越低,当整数部分超过9999999后小数部分已经完全无精度了