浮点数
来源:互联网 发布:juniper network mac 编辑:程序博客网 时间:2024/05/17 22:50
一、浮点数
1.1 单精度浮点数
1.1.1 定义及计算方法
单精度浮点数由32位构成:
- 符号位,1 bit,表示正负,0代表正,1代表负;
- 指数位,8 bits,可以是补码;或者0到255,0~126代表负,127代表0,128~255为正(即指数需减去偏置127);
- 有效数位,23 bits。有效数位是24位,实际储存23位。有效位数左侧的1不会存储,它一定存在(二进制的第一个有效数字必定是1)。
1.1.2 单精度浮点数的表示范围:
负数:
正数:
1.2 双精度浮点数
1.2.1 定义及计算方法
双精度浮点数由64位构成:
- 符号位,1 bit,0代表正,1代表负;
- 指数位,11 bits。
类比整型使用所有位为0的数字表示数值“0”,双精度浮点数表示0时指数部分也为。若如此,可能会产生冲突,例如全0的数字可以表示“0”,也可能表示1×20=1 。因此此处规定:
0x000:用来表示带符号的0(尾数为0)或者下溢数(尾数不为0);
0x7FF:用来代表无穷大(尾数为0)或NaN(尾数不为0);
其他:代表2exponent−0x3FF - 尾数:52 bits。
二进制的科学计数法为:Mantissa×2exponent 。为了最大限度提高精确度,将尾数规范化,使其处于1到2之间,便可省去最高位的1。例如:
二进制的11.101×21001 可以规格化为1.1101×21010 ,存储时尾数只需要存储1101即可;
二进制的0.00110011×2−1001 可以规格化为1.10011×2−1100 ,存储时尾数只需要存储10011即可。
于是,规范化的表达形式为:(1.mantissa)×2exponent 。
综上述,一个双精度浮点数所代表的数值为:
1.2.2 表示范围
可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是
二、参考
- 单精度浮点数,维基百科
https://zh.wikipedia.org/wiki/%E5%96%AE%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E%E6%95%B8- 双精度浮点数,维基百科
https://zh.wikipedia.org/wiki/%E9%9B%99%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E%E6%95%B8