为什么要引入浮点表示
- 编程困难,程序员要调节小数点的位置
- 数的表示范围小,要表示两个大小相差很大的数据,需要很长的机器字长
浮点表示法
定义
把一个数的有效数字和数的范围在计算机的存储单元中分别予以表示,这种把数的范围和精度分别表示的方法叫做浮点表示法
浮点数的一般形式
N=M*rE
其中,M称为浮点数的尾数,E称为浮点数的指数,也叫阶码,r称为浮点数的基数。
计算机中r取2,4,8,16等;
M取小数,可正可负;
E取整数,可正可负。
注意:基数r越大,可表示的浮点数的范围越大,浮点数的精度降低。
eg: 二进制数 10100.10011 可以写成 1.010010011*24
IEEE754标准
IEEE754浮点数标准便于软件移植
存储形式
32位浮点数(单精度)在计算机中的存储形式:
64位浮点数(双精度)在计算机中的存储形式:
不论是32位浮点数还是64位浮点数,由于基数2是固定常数,对每一个浮点数都一样,所以不必用显示的方式来表示它。
32位浮点数中:
- S是浮点数的符号位,占一位,安排在最高位,s=0表示正数,s=1表示负数
- M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边
注意:这里的最高位因为规格化总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。 - E是阶码,占用8位,阶符采用隐含方式,即采用移码方法来表示正负指数
64位同理
真值和规格化表示
- 规格化表示:当尾数的值不为0时,尾数域的最高有效位应该为1,这称为浮点数的规格化表示
- 真值表示
在IEEE754标准中:
一个规格化的32位浮点数x的真值表示为:
x=(-1)S * (1.M) * 2E-127
一个规格化的64位浮点数x的真值表示为:
x=(-1)S * (1.M) * 2E-1023
其中,S为机器存储中的符号位,E为机器存储中的阶码,1.M为机器存储中的尾数,,但是由于规格化的浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。就拿32位浮点数的尾数来说,用23位字段可以存储24位有效数字。 - IEEE754表示的特殊值
阶码 E | 尾数 M | 表示的值 |
---|---|---|
全为0 | 全为0 | 值为0,结合符号位,有正0和负0之分 |
全为1 | 全为0 | 值为无穷大,结合符号位,有正无穷和负无穷之分 |
注意:在实际表示中,除去E全0和全1的特殊情况
例题
将十进制数20.59375转换成754标准的32位浮点数的二进制格式。
解:
20.59375=10100.10011
10100.10011=1.010010011*24
得到:s=0,E=4+127=131,M=010010011
最后得到32位浮点数的二进制格式为:
0 10000011 0100 1001 1000 0000 0000 000