浮点数
是指小数点位置可浮动的数据。通常表示为:
N = M · R^E (例:0.10111 × 2110 )
其中N为浮点数, M为尾数(mantissa),E为阶码(exponent),R为阶的基数(radix)
R为常数,一般为2,8,16。在一台计算机中,所有数据的R都是相同的。因此,不需要在每个数据中表示出来。
浮点数的表示形式:
![](https://i-blog.csdnimg.cn/blog_migrate/72943742513a971cb236c957cfd64d2a.png)
Ms是尾数的符号位,0表示正,1表示负。
E为阶码,整数n+1位,1位符号位。
M为尾数,m位。
尾数通常用规格化形式(即尾数用纯小数形式给出,而且尾数绝对值应大于1/R,即小数点后第一位不为0。)表示,小数点后不能为0。
例:X = +0.0010111=0.10111×2^(-2) = 0.10111 × 2^(-0010) = 0.10111 × 2^(1110)
规格化: 为了在尾数中表示最多的有效数据位,同时使浮点数具有唯一的表示形式,尾数应当采用规格化表示方法,即尾数用纯小数形式给出,而且尾数绝对值应大于1/R,即小数点后第一位不为0。
对于补码表示的尾数,其规格化后的数值满足M≤-1/R或M≥1/R。不符合这种规格的数据可通过修改阶码并同时移动尾数的方法使其满足这种格式。
规格化后正尾数的形式为: 0.1XXX…X
负尾数的形式为: 1.0XXX…X
需要注意的是当M=-1/2,对于原码来说,是规格化数,而对于补码来说,不是规格化数。
例:将0.0011和-0.0011规格化表示。
解:0.0011=0.0011×2^0=0.1100 ×2^(0-2)
[-0.0011]补=1.1101
-0.0011的浮点表示为:
![](https://i-blog.csdnimg.cn/blog_migrate/f8a50d32ef3423ee5df650589e84e490.png)
例:设浮点表示中,E=4、[M]补=0.1000B,分别求出当R=2或R=16时表示的数值的大小?
解:当R=2时:
N=M×R^E=0.1000B ×2^4=0.5 ×2^4=8
当R=16时:
N=M×R^E=0.1000B ×16^4=0.5 ×16^4=32768
当一个浮点数的尾数为0(不论阶码为何值)或阶码的值太小(阶码的值比能在机器中表示的最小值还小时),超出表示范围时,该浮点数看成零值,称为机器零。
IEEE754国际标准,常用的浮点数有两种格式:
单精度浮点数32位,阶码8位,尾数24位。
双精度浮点数64位,阶码11位,尾数53位。
![](https://i-blog.csdnimg.cn/blog_migrate/ef8b4ebfc67b0aa9df5d079b0fe6de1f.png)
多数计算机中浮点数的尾数用补码表示,阶码用补码或移码表示。
![](https://i-blog.csdnimg.cn/blog_migrate/c5a0efc73b1fe4c5fe9eb114952fa017.png)
例3.30 X=+1011 [X]补=01011 [X]移=11011
X=-1011 [X]补=10101 [X]移=00101
移码特点:
1.最高位为符号位,1表示正,0表示负。
2.阶码只执行加减运算,运算结果要修正(+2n),将符号位取反.
3.0有唯一的编码,即[+0]移=[-0]移=1000…00
当阶码≤– 2n时,称为机器零,将阶码置成000…000,不管尾数大小,都按浮点数下溢处理。
浮点数的阶码采用移码的原因
•便于比较浮点数的大小。阶码大的,其对应的真值就大,阶码小的,对应的真值就小。
•简化机器中的判零电路。当阶码全为0,尾数也全为0时,表示机器零。
32位定点整数(补码)的范围是:–2^31~ +2^31-1,精度为31位。
32位浮点数数值范围:–2^127~ +(1-2 -23 )·2^127,精度为24位。