浮点加减运算中关于结果规格化的思考

浮点加减运算中关于结果规格化的思考总结一下浮点加减法中关于结果规格化的具体操作方法。

对于两个浮点数x和y满足:
在这里插入图片描述
完成x与y的加减法有四个步骤:

  1. 0操作数检查。即检查是否有一个操作数为0,是的话直接得到结果,一般在计算机中不进行这一步。
  2. 比较阶码大小并完成对阶。要让两个浮点数的尾数能够直接相加减,它们的阶码也就是 M x 和 M y M_{x}和M_{y} MxMy必须相同,因此必须完成对阶,一般是让小阶向大阶看齐。
  3. 尾数进行加减运算。方法与定点加减运算完全一致,没有什么好说的。
  4. 结果规格化。这一步是重点,也是难点。
    要想知道怎么规格化,肯定得知道什么才是规范的表达方式。浮点数都是近似表示的,精度由尾数决定,数的表示范围大小由R、E决定。为了提高精度需要使尾数的有效位数尽可能占满可用的位数。这种措施称为浮点数的规格化。规格化要求尾数:
              1/R<=|M|<1

    计算机中R = 2,因此实际上我们计算出来得到的尾数必须属于[0.5, 1)。

在浮点数加减运算时,我们采用双符号位,因此,当计算结果为01.XXXX或者10.XXXX时,表示结果溢出,已经大于1了,因此需要规格化。
下面举个具体的例子:
m = 2 2 X 0.11011011 , n = 2 4 X ( − 0.10101100 ) m = 2^{2}X0.11011011,n = 2^{4}X(-0.10101100) m=22X0.11011011n=24X(0.10101100),求m+n。
逐步分析:

  • 0操作数检查。m和n都不为0。
  • 对阶。小阶2向大阶4对齐,所以m的阶数加2,相应地,m的尾数右移(小数点左移,尾数变小)两位: m = 2 4 X 0.00110110 ( 11 ) m = 2^{4}X0.00110110(11) m=24X0.00110110(11),而n保持不变。
  • 由于要进行补码运算,所以将m和n的尾数变成补码表示(双符号位):
    m = 2 4 X 00.00110110 ( 11 ) , n = 2 4 X 11.01010100 m = 2^{4}X00.00110110(11),n = 2^{4}X11.01010100 m=24X00.00110110(11)n=24X11.01010100,其中11.01010100=11.01010011+1(取反再加1)。接下来将尾数相加:
    在这里插入图片描述
    可以看到并未溢出,但是并不一定满足大于0.5, 我们将其转成原码很容易发现第一位为0,也就是说是小于0.5的,必须规格化,由此我们总结出要规格化的几种情形:
  • 若尾数为00.0XXX或者11.1XXX,虽然并未溢出,但是并不满足大于0.5,因此也必须要规格化,由于尾数要变大,阶码变小,即尾数左移(小数点右移),称之为向左规格化,使之最终变成00.1XXXX或者11.0XXXX。
  • 若尾数为10.XXXX或者01.XXXX表明运算结果溢出,必须使尾数变小,阶码变大,尾数右移(小数点左移),称之为向右规格化。
  • 针对例子中的情况,需要进行向左规格化,最终变成:
         m + n = 11.00010101 ( 10 ) X 2 3 m + n = 11.00010101(10)X2^{3} m+n=11.00010101(10)X23
  • 将尾数进行舍入处理,最后为10直接加1,变成11.00010110,所以换成原码的尾数为00.11101010,即最终有:
         m + n = 0.11101010 X 2 011 m + n = 0.11101010X2^{011} m+n=0.11101010X2011

今天的文章浮点加减运算中关于结果规格化的思考分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7485.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注