IEEE754标准中的4种舍入模式

一、前言

最近在写一个基于IEEE754标准的浮点加法器,其中有一项要求就是要满足IEEE754标准的四种舍入模式。

我们在进行对阶或者右规格化的时候,阶数较小的操作数在进行右移的时候,会造成尾数部分的低位丢失,从而会造成误差。因此我们才需要根据需求,采取四种舍入模式中的一种对尾数进行舍入操作以减少误差。

二、IEEE754标准中的4种舍入模式

1、就近舍入

即十进制下的四舍五入。但是也会出现以下几种情况:

  • 多余数字是1001,它大于0.5,故最低位进1。
  • 多余数字是0111,它小于0.5,则直接舍掉多余数字。
  • 多余数字是1000,正好是等于0.5的特殊情况;那么此时最低位为0则舍掉多余位,最低位为1则进位1。

注意这里说明的数位都是指二进制数。因为这是尾数,所以在计算这些二进制和0.5的关系的时候,也即转为10进制的时候,我们用每一位的权重乘以2^(-i)然后求和即可。

2、朝0舍入:即朝数轴零点方向舍入,所以我们直接截尾即可。

3、朝正无穷舍入:对正数而言,多余位全为0则直接截尾,不全为0则向最低有效位进1;负数的话不管多余位是多少直接截尾即可。

4、朝负无穷舍入:对负数而言,多余位全为0则直接截尾,不全为0则向最低有效位进1;正数的话不管多余位是多少直接截尾即可。

三、举例

要求保留小数点后3位

1、就近舍入

对于1.001_1001,舍入处理后为1.010(去掉多余的4位,加0.001)
对于1.001_0111,舍入处理后为1.001(去掉多余的4位)
对于-1.001_1000,舍入处理后为-1.010(去掉多余的4位,加0.001,因为此时最低位为0)
对于-1.010_1000,舍入处理后为-1.010(直接去掉多余的4位,因为此时最低位为0

2、朝0舍入

//正数直接截尾
对于1.001_1001,舍入处理后为1.001(直接去掉多余的4位)
对于1.001_0111,舍入处理后为1.001(直接去掉多余的4位)

//负数直接截尾
对于-1.001_1000,舍入处理后为-1.001(直接去掉多余的4位)
对于-1.010_1000,舍入处理后为-1.010(直接去掉多余的4位)

3、朝正无穷舍入

//正数多余位不全为0进位1
对于1.001_1001,舍入处理后为1.010(去掉多余的4位,加0.001)
对于1.001_0111,舍入处理后为1.010(去掉多余的4位,加0.001//正数多余位全为0直接截尾
对于1.001_0000,舍入处理后为1.001(直接去掉多余的4位)

//负数直接截尾
对于-1.001_1010,舍入处理后为-1.001(直接去掉多余的4位)

4、朝负无穷舍入

//正数直接截尾
对于1.001_1001,舍入处理后为1.001(直接去掉多余的4位)
对于1.001_0111,舍入处理后为1.001(直接去掉多余的4位)

//负数多余位全为0直接截尾
对于-1.001_0000,舍入处理后为-1.001(直接去掉多余的4位)

//负数多余位不全为0进位1
对于-1.001_1010,舍入处理后为-1.010(去掉多余的4位,加0.001

我觉得可能我的理解会有错误,知道的小伙伴可以交流一下!!!

参考链接: https://www.cnblogs.com/jva-index/p/13897423.html

猜你喜欢

转载自blog.csdn.net/qq_39507748/article/details/110219526