浮点加法和减法

浮点加法和减法 

 (2013-12-03 13:14:27)

转载

标签: 

教育

分类: 版级系统开发

设有两个浮点数x和y,它们分别为:

=2Ex·M

=2Ey·M

两浮点数进行加法和减法的运算规则是

    x±=(M2ExEy±M)2Ey,  E<=E

其中,Ex、Ey分别为x、y的阶码,Sx、Sy分别为的尾数。完成浮点加减运算的操作过程大体分为四步:   
    1. 0 操作数的检查;
    2. 比较阶码大小并完成对阶;
    3. 尾数进行加或减运算;
    4. 结果规格化并进行舍入处理。

1.0操作数检查

浮点加减运算过程比定点运算过程复杂。如果判知两个操作数xy中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作,以节省时间。0操作数检查步骤则用来完成这一功能。

2.对阶

两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若两数阶码不同,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程叫做对阶

要对阶,首先应求出两数阶码Ex和Ey之差,即:

                     △x = Ex - Ey

若Ex = Ey,表示两数阶码相等,不需改变两数的阶码;若Ex ≠ Ey,要通过尾数的移位以改变Ex或Ey,使之相等。由于浮点表示的数多是规格化的,尾数左移会引起最高有产位的丢失,造成很大误差;而尾数右移虽引起最低有效位的丢失,但造成的误差较小,因此,对阶操作规定使尾数右移,尾数右移后使阶码作相应增加,其数值保持不变。很显然,一个增加后的阶码与另一个相等,所增加的阶码一定是小阶。因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。

3.尾数求和

对阶完毕后就可对尾数求和。不论是加法运算还是减法运算,都按加法进行操作,其方法与定点加减运算完全一样。

4.规格化

当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:

                                   1/2   ≤  |M|<1

显然对于正数而言,有M = 00.1φφφ;对于负数,其补码形式为11.0φφφ(即-0.0*******,左归)。这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφφ或11.1φφφ,就是规格化的数;如果它们相等,即为00.0φφφ或11.0φφφ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化。规则是:尾数左移1位,阶码减1。

在浮点加减运算时,尾数求和的结果也可以得到01.φφφ或10.φφφ,即两符号位不相等,在这定点加减运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将尾数运算结果右移以实现规格化表示,称为向右规格化,即尾数右移1位,阶码加1。

5.舍入

在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。

常用的舍入方法有两种:一种是“0舍1入”法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位加“1”,另一种是“恒置1”,即只要数位被移掉,就在尾数的末位恒置“1”。

6.溢出处理

浮点数的溢出是以其阶码溢出表现出来的。在加、减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应的处理:若阶码下溢,要置运算结果为浮点形式的机器0;若阶码上溢,则置溢出标志。  

【例 】 =2010×0.11011011,=2100×(-0.10101100),求

[解:]

为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的

浮点表示分别为

[]浮=00 010,  0.11011011

[]浮=00 100,  1.01010100

<1> 求阶差并对阶

EEE=[E]补+[-E]补=00 010+11 100=11 110

即△E为-2,的阶码小,应使M右移两位,E加2,

[]浮=00 100,0.00110110(11)

其中(11)表示M右移2位后移出的最低两位数。

<2> 尾数求和

 

0. 0 0 1 1 0 1 1 0 (11)

 
 

+ 1. 0 1 0 1 0 1 0 0     

 
 

1. 1 0 0 0 1 0 1 0 (11)

 

<3>规格化处理

尾数运算结果的符号位与最高数值位同值,应执行左规处理,结果为1.00010101(10),阶码为 00 011。

<4>舍入处理

采用0舍1入法处理,则有


              1. 0 0 0 1 0 1 0 1
            +          1
          ────────────────
              1. 0 0 0 1 0 1 1 0

<5>判溢出

阶码符号位为00,不溢出,故得最终结果为

           x=2011×(-0.11101010)

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值