IEEE浮点数舍入默认算法 可以用一句话来概括

四舍六入五成双

例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1。如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可。对于多余数字是1000、正好是最低位一半的特殊情况,最低位为0则舍掉多余位,最低位为1则进位1、使得最低位仍为0(偶数)。

注意这里说明的数位都是指二进制数。

举例:要求保留小数点后3位。

对于1.0011001,舍入处理后为1.010(去掉多余的4位,加0.001)
对于1.0010111,舍入处理后为1.001(去掉多余的4位)
对于1.0011000,舍入处理后为1.010(去掉多余的4位,加0.001,使得最低位为0)

对于1.1001001,舍入处理后为1.101(去掉多余的4位,加0.001)
对于1.1000111,舍入处理后为1.100(去掉多余的4位)
对于1.1001000,舍入处理后为1.100(去掉多余的4位,不加,因为最低位已经为0)

对于1.01011,舍入处理后为1.011(去掉多余的2位,加0.001)
对于1.01001,舍入处理后为1.010(去掉多余的2位)
对于1.01010,舍入处理后为1.010(去掉多余的2位,不加)

对于1.01111,舍入处理后为1.100(去掉多余的2位,加0.001)
对于1.01101,舍入处理后为1.011(去掉多余的2位)
对于1.01110,舍入处理后为1.100(去掉多余的2位,加0.001)

一、前言

最近在写一个基于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,因为此时最低位为1)
对于-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

IEEE浮点数尾数向偶舍入
IEEE浮点数舍入(四舍六入五成双)

IEEE754标准中的4种舍入模式

IEEE浮点数尾数向偶舍入-四舍六入五成双相关推荐

  1. 银行家舍入-四舍六入五成双

    在js的计算中: 一个例子,比如说一件商品,它的含税单价是450,税率是3%,那么我们将它转为不含税单价.450/1.03=436.8932038834951 结果是17位,共13位小数.当然实际上, ...

  2. 四舍五入 与 四舍六入五成双

    今天公司有个同事在调一个asp程序时候,发现 round(1.25,1) 返回的竟然是1.2 而不是1.3 查询了一下CSDN的帖子,发现这竟然是一个Bug: http://search.csdn.n ...

  3. C# 四舍五入 (解决四舍六入五成双的问题)

    四舍六入五成双是一种精确度的计数保留法.舍入规律是"四舍六入五成双",这里"四"是小于五的意思,"六"是大于五的意思,"五&quo ...

  4. php 五舍六入,Golang浮点型的默认舍入规则——四舍六入五成双

    四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则,又名银行家舍入法.它比通常用的四舍五入法更加精确. 具体规则: 被修约的数字小于5时,该数字舍去: 被修约的数字大于5时,则进位: ...

  5. sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...

    做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...

  6. java 四舍六入五成双_【数据小常识】“四舍六入五成双”

    "四舍六入五成双"规则如下: "四舍六入五成双",也即"4舍6入5凑偶",这里"四"是指≤4 时舍去,"六&q ...

  7. 四舍六入c语言公式,【测绘专用】四舍六入五成双的C++实现

    作为一名测绘专业的学生,在内业计算中经常遇到遇到小数点后保留几位小数的问题.根据<工程测量实验教程>(王宇会 著)一书,内业计算按"四舍六入,五前单进双舍(或称奇进偶不进)&qu ...

  8. “四舍六入五成双规则” 与 C语言如何实现“四舍五入”

    1.四舍六入五成双规则 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是"四舍六入五成双",也即"4舍6入 ...

  9. 关于“四舍六入五成双/四舍六入五留双/四舍六入五单双”等口诀的实例研究

    关于"四舍六入五成双/四舍六入五留双/四舍六入五单双"等口诀的实例研究. 在网上有很多搜索结果,不过不容易理解清楚. 说来说去,还是来个实例比较容易理解. 先看一下微软的文档: h ...

最新文章

  1. 算法小论——第三章 又把新桃换旧符
  2. Mila唐建博士《图神经网络:算法与应用》研究进展
  3. 如何设计一个高可用、高并发秒杀系统
  4. rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)
  5. qpython获取手机gps_基于Python获取照片的GPS位置信息
  6. python get score gain_Python functional.linear方法代码示例
  7. 程序员的《学习之道》
  8. 111 进程的创建和结束
  9. 解决QFontDatabase: Cannot find font directory XXX/lib/fonts
  10. U盘格式化后容量变小恢复方法
  11. 组成原理 - 网卡与HBA卡的区别
  12. 【转】傅里叶分析之掐死教程(完整版)
  13. 大数据BI解决方案:医疗行业的数据治理
  14. XPosed及插件安装(解决下载http://dl.xposed.info/repo/full.xml.gz时出错的问题)
  15. Mybatis+MySql中字段名为保留字(关键字)的情况
  16. 创维linux进入工厂模式,彩色电视机进入工厂模式后数据调乱了,如何恢复默认?-创维电视8TTN工厂模式数据怎么调...
  17. 你知道交换机配置的三种端口是什么吗?
  18. 【jieba获取关键词】
  19. JS 正则表达式否定匹配(正向前瞻)
  20. 无聊的农场 - vue小游戏

热门文章

  1. 微信支付v3——批量转账到零钱(提现)
  2. 2017 Multi-University Training Contest - Team 10
  3. JDK内置并发框架AQS对CLH锁的优化
  4. 生产力高于一切?我们为什么会对技术上瘾?
  5. 七牛删除视频文件操作
  6. 15.6 模板全特化与偏特化(局部特化)
  7. c# 通过读取Json文件生成HTML页并在浏览器显示
  8. c语言stdin输入字符,scanf如何从stdin中读取数据的
  9. Docker swarm搭建及常用命令、yml文件
  10. python量化策略——改进的美林时钟介绍(0)