码迷,mamicode.com
首页 > 其他好文 > 详细

浮点加减运算中左规右规问题

时间:2018-06-19 22:48:34      阅读:3038      评论:0      收藏:0      [点我收藏+]

标签:理解   line   浮点运算   sub   数值   正数   ora   strong   溢出   

当尾数用二进制表示时,浮点规格化的定义是尾数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

 

【例 】 =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)

 

浮点加减运算中左规右规问题

标签:理解   line   浮点运算   sub   数值   正数   ora   strong   溢出   

原文地址:https://www.cnblogs.com/qy-blogs/p/9201227.html

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!