白中英《计算机组成原理》(第5版)教材精讲(运算方法和运算器 浮点运算方法和浮点运算器)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 --÷=⨯÷=⨯÷=实现的逻辑框图:

相关文档
最新文档