IEEE 754中 单精度浮点数和双精度浮点数存储
IEEE 754中 单精度浮点数和双精度浮点数存储
我们先了解一下 单精度浮点数 和 双精度浮点数 的基本信息。
名称 | 占用内存(bit;位) | 内存分配 | 指数范围 | 指数偏移 | 精度 |
---|---|---|---|---|---|
1符号位 | |||||
float | 32 | 8指数位 | [-127,128] | +127 | 约7位有效数 |
1符号位 | |||||
23尾数位 | |||||
1符号位 | |||||
double | 64 | 11指数位 | [-1023,1024] | +1023 | 约16位有效数 |
52尾数位 |
单精度浮点数存储
需要32个二进制(bit)。
-
Sigh(符号位)
占最高位,其中0位整数,1为负数。 -
Exponent(偏移的指数位)
占30-23这8位。用于表示以2为底的指数,表示范围为[-127,128]。浮点型指数位都有一个固定的偏移量,用于是这个指数和偏移量的和为一个非负整数。(单精度浮点数的固定偏移量为127,及八位二进制全为1,八位二进制中最大数) -
Fraction(尾数位)
占22-0这23位。二进制格式存储十进制浮点数时,先将十进制浮点数转换成二进制格式,之后在转化成以2为底的指数形式。
(尾数:指小数点放在第一位和第二位之间,并保证最高位不为0,这个处理过程叫做规范化。)
之后对尾数进行一些处理
隐藏最高位1
将最高位1和之后的小数点一起忽略,可节约一些空间。
低位补0
当经过“隐藏最高位1”这个步骤后,如果尾数不满23位时,在不影响原数据的情况下,低位补0,补满23位。
双精度浮点数存储
需要64个二进制(bit)。
-
Sigh(符号位)
占最高位,0位正数,1为负数。 -
Exponent(偏移的指数位)
占63-52这11位。用于表示以2为底的指数,表示范围为[-1023,1024]。浮点型指数位都有一个固定的偏移量,用于是这个指数和偏移量的和为一个非负整数。(单精度浮点数的固定偏移量为1023,及11位二进制全为1,八位二进制中最大数) -
Fraction(尾数位)
占51-0这52位。二进制格式存储十进制浮点数时,先将十进制浮点数转换成二进制格式,之后在转化成以2为底的指数形式。
(尾数:指小数点放在第一位和第二位之间,并保证最高位不为0,这个处理过程叫做规范化。)
之后对尾数进行一些处理
隐藏最高位1
将最高位1和之后的小数点一起忽略,可节约一些空间。
低位补0
当经过“隐藏最高位1”这个步骤后,如果尾数不满52位时,在不影响原数据的情况下,低位补0,补满52位。