本文内容来自wiki
单精度浮点数在IEEE 754-2008标准中, 32位二进制格式被称为binary32,在IEEE 754-1985被称为single。IEEE 754还制定了其他的浮点数,比如64位二进制格式的双精度浮点数,以及最近基于十进制的表示。
单精度浮点型格式
单精度浮点型是由32bits组成的:
- 1bit表示符号
- 8bits表示指数
- 24bits表示有效精度(实际存储只用了23bits)
这决定了他有6-9个有效数字(十进制)的精度。如果一个最多只有6个有效数字的十进制数可以被转换为IEEE 754单精度浮点数,那么转换回数字字符串时,最终结果必须和原来的十进制数一样。如果一个单精度浮点数可以转换为至少9位有效数字的十进制数,那么转回单精度浮点数时,必须和原始单精度数一样。
计算公式:
(-1)sign 2e-127 (1 + ∑( b23-i * 2-i)) (1 <= i <=23)
sign 是符号位数值
e 是指数位数值
b23-i 是有效数字位数值
这其中有不少公式计算,详细可以看wiki。
与十进制之间转换
(12.375)10
= (12)10 + (0.375)10
= (1100)2 + (.011)2
= (1100.011)2
= (1.100011)10 * 23
符号部分为0,指数部分为3+127= 1000 0010,有效数字部分为1000 1100 0000 0000 0000 000
这其中0.375是通过如下方式转换的:
0.375 2 = 0 + 0.750 => 0
0.750 2 = 1 + 0.5 => 1
0.5 * 2 = 1 + 0.0 => 1