白中英《计算机组成原理》(第5版)教材精讲(运算方法和运算器 浮点运算方法和浮点运算器)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.6 浮点运算方法和浮点运算器
一、浮点加法、减法运算
1.浮点加减运算
设有两个浮点数x和y,它们分别为
x=2Ex·Mx
y=2Ey·My
其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。两浮点数进行加法和减法的运算规则是
x±y=(Mx2Ex-Ey±My)2Ey,设Ex<=E。
2.浮点运算
步骤如下:
(1)0操作数的检查,看有无简化操作的可能;
(2)比较阶码大小并完成对阶(小阶向大阶对齐);
(3)尾数进行加或减运算;
例:设1010,0.5,0.4375x y ==,假设尾数有效位为4位,用二进制形式求
()x y +浮点运算。
解:
01
102220.50.10.12 1.0002x -===⨯=⨯02
102220.43750.01110..1112 1.1102y -=-=-=-⨯=⨯第一步,对阶:因y 阶小,调整y 的指数向2阶看齐
21
221.11020.1112y --=⨯=-⨯第2步,尾数相加:
111
2221.0002(0.1112)0.1112x y ---+=⨯+-⨯=⨯第3步,规格化:
234
2220.11120.1002 1.0002x y ---+=⨯=⨯=⨯第4步,检查上溢或下溢:
由于指数采用移码,1274126≥-≥-,求和结果既无上溢也无下溢
求和结果()x y +
浮421.0002-=⨯,尾数有效位恰好是4位,舍入时无需做任何改变。
最后结果:()x y +浮422101.00020.00010000.0625-=⨯==十进制数验证:10
0.510(0.437510)0.0625x y +=+=为突出浮点加减法运算中小数点位置必须对齐的概念,下面再举一个十进制数浮点加减法运算的例子。
例:设210100.3x E x x M =⨯=⨯,310100.2y E y y M =⨯=⨯。求x y +,x y -。
解:2,3,x y x y E E E E ==<,对阶时小阶向大阶看齐。
233(10)10(0.3100.2)10x y y E E E
x y x y M M --+=∙-⨯=⨯+⨯30.2310230
=⨯=233(10
)10(0.3100.2)10x y y E E E x y x y M M ---=∙-⨯=⨯+⨯ 3(0.17)10170
=-⨯=二、浮点乘法和除法运算
设有两个浮点数x和y:
x=2E x·M x
y=2E y·M y
x×y=2(E x+E y)·(M x×M y)
x÷y=2(E x-E y)·(M x÷M y)乘除运算分为四步:0操作数检查,阶码加减操作,尾数乘除操作,结果规格化和舍入处理。
浮点数的阶码运算(移码的运算规则)[X]移+[Y]移=2n +[X+Y]移
)2(mod ][][][][2][][][1++=+=++=+n n
x y y x y x
y x 补
移补移移移移
移码采用双符号位,为了对溢出进行判断
01
为正 00 为负10 上溢 11 下溢
x=+011,y=+110,求[x+y]移和[x-y]移,并判断是否溢出。
[x]移=01011, [y]补=00110,[-y]补=11010
[x+y]移=[x]移+[y]补=10001,结果上溢。
[x-y]移=[x]移+[-y]补=00101,结果正确,为-3。尾数处理
截断
舍入
尾数用原码表示时,只要尾数最低为1或者移出位中有1数值位,使最低位置1。0舍1入
尾数用补码表示时,丢失的位全为0,不必舍入。
丢失的最高位为0,以后各位不全为0时;或者最高为1,以后各位全为0时,不必
舍入。丢失的最高位为1,以后各位不全为0时,则在尾数的最低位入1的修正操作。例:设有浮点数10100.5,0.435x y ==,用二进制求()x y ⨯浮
解:先将十进制数表示成二进制形式
12
1021020.5 1.0022,0.435 1.1102x y --==⨯==-⨯()x y ⨯浮1222(1.0022)( 1.1102)
--=⨯⨯-⨯第1步,将x 和y 的指数部分相加:
1(2)3
x y e e +=-+-=-用移码表示,则为:
3127124
x y E E +=-+=-第2步,将被乘数和乘数的尾数相乘:
1.000
* 1.110
0000
1000
1000
+ 1000 1110000
得到的乘积为321.1100002
-⨯,由于我们只需要4位有效数,因此将乘积结果修
正为321.1102-⨯。
第3步,规格化与溢出检查:
乘积的有效位数已经规格化,且由于1273126≥-≥-,没有发生上溢和下溢。第4步,舍入到4位有效数字,这一步无需做任何操作,结果仍为3
21.1102-⨯第5步,确定积符号:x 和y 符号相反,乘积为负数,即:()x y +浮3
21.1102-=-⨯十进制浮点数验证:
322210
1.11020.001100.001110.21875--⨯=-=-=-0.5(0.4375)0.21875
⨯-=-例:设基数
2310,10100.4,10100.2y x E
E x y R x M y M ==⨯=⨯=⨯=⨯用浮点法求x y ⨯,x y ÷。
解:
2,3,0.4,0.2
x y x y E E M M ===+=+()2310()10(0.40.2)8000
x y E E x y x y M M -+⨯=⨯⨯=⨯⨯=()
2310()10(0.40.2)0.2x y E E x y x y M M --÷=⨯÷=⨯÷=实现的逻辑框图: