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

浮点数舍入相比向整数舍入,就复杂一些,IEEE定义了四种不同的舍入方式,默认的为向偶数舍入(round-to-even)。其他三个分别是向零舍入,向上舍入和向下舍入。
 
其他三个比较直观,就不再说明,以十进制为例说明“向偶数舍入”,平常的四舍五入中,以舍入到小数点后两位为例,如果第3位小数小于5,则舍去,大于等于5的则进1。向偶数舍入除了最中间的这个值(第3位小数为5)以外,其他与平常的舍入相同,中间的这个值,则要保证在舍入的时候舍入位必须为偶数。比如1.40, 1.60, 1.50, 2.50, -1.50向偶数舍入的结果分别为1, 2, 2, 2, -2
 
至于为什么要想偶数舍入,这是CSAPP(2e)中的原文:
 
[plain]  view plain copy print ?
 
  1. The problem with such a convention is that one can easily imagine scenarios   
  2. in which rounding a set of data values would then introduce a statistical bias   
  3. into the computation of an average of the values. The average of a set of numbers   
  4. that we rounded by this means would be slightly higher than the average of   
  5. the numbers themselves. Conversely, if we always rounded numbers halfway   
  6. between downward, the average of a set of rounded numbers would be   
  7. slightly lower than the average of the numbers themselves. Rounding toward   
  8. even numbers avoids this statistical bias in most real-life situations.   
  9. It will round upward about 50% of the time and round downward about 50% of the time.  
也就是如果在一组数据中,向偶数舍入一般既有向上舍入也有向下舍入,可以一定程度上消除统计平均数时由于总是向上舍入时所带来的统计偏差。
 
扩展成二进制,就是对形如 XX···X.YY···Y100···二进制模式位的数(最右边的Y是要舍入的位置),根据舍入位是否为偶数来选择是向上舍入还是向下舍入。(至于为什么是100,我还没想明白)
比如10.010, 10.011, 10.110, 11.001向偶数舍入(保留小数点后一位)的结果分别为10.0, 10.1, 11.0, 11.0。
 
浮点数:二进制表示(IEEE标准),舍入,加减运算,类型转换(int、float、double之间) 阅读详情

相关推荐

C语言printf保留两位小数,为啥3.185和3.195都输出3.19?一个坑引发的精度思考

本文深入探讨了C语言中printf函数保留两位小数时出现的精度问题,解释了为何3.185和3.195都输出3.19的现象。通过分析IEEE 754浮点数标准和银行家舍入法,揭示了计算机处理浮点数的底层机制,并提供了可靠的四舍五入实现方案和最佳实践,帮助开发者避免精度陷阱。

weixin_30608503的博客 474

浮点数的舍入问题

《计算机硬件技术基础》第2章39页表2-5舍入控制中的就近舍入(偶)这个问题,对它不太明白,不知道什么意思。请您讲解一下,并且请您举个例子。 解答:  表的下面有一段文字进行了解释:  例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1。如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可。对于多余数字是1000

Yelbosh的专栏 1万+

C/C++浮点数舍入全解析:从银行家舍入到自定义策略

浮点数舍入是计算机科学中处理实数近似表示的基础操作,其核心原理源于IEEE 754标准对二进制浮点数的定义。由于二进制无法精确表示所有十进制小数,如0.1这样的常见值在二进制中是无限循环的,这导致了浮点数运算存在固有精度误差。在工程实践中,不同的舍入规则(如四舍五入、银行家舍入法)直接影响计算结果的统计偏差与系统精度。C/C++标准库提供了trunc、floor、ceil、round等函数,其中round函数默认采用银行家舍入法(四舍六入五成双),这有助于在金融计算和科学模拟中减少累积误差。理解这些函数的差

weixin_33563728的博客 236

IEEE754标准中的4种舍入模式

IEEE754标准中的4种舍入模式一、IEEE754标准中的4种舍入模式二、举例说明1.就近舍入2.朝0舍入3.朝正无穷舍入4.朝负无穷舍入 一、IEEE754标准中的4种舍入模式 1.就近舍入(向偶数舍入):即十进制下的“四舍五入” (1)例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1; (2)如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可; (3)对于多余数字是1000、正好是最低位一半的特殊情况,最低位为0则舍掉多

weixin_42454243的博客 1万+

手把手教你用ROS2控制PX4无人机画个圆:从C++代码到Gazebo仿真全流程解析

本文详细解析了如何使用ROS2控制PX4无人机实现圆形轨迹飞行,涵盖从C++代码编写到Gazebo仿真的全流程。重点介绍了Offboard模式下的控制算法实现、圆形轨迹生成的数学原理,以及解决通信延迟和坐标系转换等常见问题的实用技巧。通过实战案例,帮助开发者快速掌握无人机轨迹跟踪仿真的核心技术。

weixin_30839881的博客 95

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

浮点数的舍入方案(IEEE标准)

1.浮点数不可能精确表示每一个数的,比如0.2。因此对于值x,我们一般想用一种系统的方法,能够找到最接近的匹配值 2.IEEE规定了4种舍入方案。 向偶数舍入、向零舍入、向上舍入、向下舍入。 系统默认采用 向最接近的值舍入(round-to-nearest)。这是基础,其他三种方式用于计算上下界。 即向最接近的设舍入(round-to-nearest)是一个总称。它具体采用哪一种方...

qq_39200110的博客 8264

概率论 知识图谱 + 实战案例解析

本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。

weixin_29051193的博客 267

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

注意这里说明的数位都是指二进制数。举例:要求保留小数点后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位,

luoganttcc的博客 2033

准备生日礼物

摘要: 题目要求统计某月份需要准备的员工生日礼物数量。输入包括目标月份、员工姓名列表和对应的生日列表(格式为Year/Month/Day)。需处理重复员工(以最后一次录入为准),统计该月生日的员工人数。示例1中5月有3名员工生日,输出3;示例2中10月有6名,输出6。解题关键在于使用哈希表去重(以员工姓名为键),拆分生日字符串提取月份进行匹配。代码实现(C++/Java/Python)均遵循以下步骤:读取输入、哈希去重、解析月份并统计目标月份人数。时间复杂度为O(n),空间复杂度O(n)。

面试高手的博客 297

31.华为路由器:PPPOE配置模拟实验及NAT配置

实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 The number of interface

迷逝 8116

为什么 0.1+0.2= 0.300000004 float32 python实现

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

luoganttcc的博客 406

《C#零基础入门之百识百例》(七十一)委托介绍 -- 战士升级示例

委托的存在是因为,我们有时候需要将一个函数作为另一个函数的参数,这时就要用的委托(Delegate)机制。委托用关键字`delegate`声明,他实际上定义了一种“函数类型”,明确规定了函数参数类型和返回值类型。

陈言必行 -- Unity游戏开发领域优质博主 2110

PAT 1123 舍入-纯C语言避坑详解(从学生角度出发)

摘要:本文介绍了不同编译器处理浮点数精度的三种方法(四舍五入、截断、四舍六入五成双),并给出了相应的编程实现。程序需处理N个不超过200位的浮点数,根据指令符(1/2/3)按指定方法保留D位小数。关键点包括:处理整数时补零、负数符号处理、进位逻辑实现(特别是四舍六入五成双规则),以及避免输出不必要的正负号。文中通过样例详细说明了各种情况的处理逻辑,并提供了完整的AC代码实现,标注了调试过程中发现的重要细节。

xhxk_921的博客 1333

RK3566/RK3568 Android 11添加系统服务

【代码】RK3566/RK3568 Android 11添加系统服务。

qq_23921815的博客 641

如何利用gretna软件计算脑网络全局属性(聚类系数,小世界属性,最短路径),局部属性指标(度,度分布,节点效率),如何理解网络稀疏度

grena工具箱被设计用于fMRI数据的图论网络分析。它是一套MATLAB函数和基于MATLAB的接口,用于常规的fMRI预处理,用于计算和统计分析最常用的网络指标,如小世界参数、效率、度、间性、关联性、层级性、同步性和模块化。......

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9174

Lua浮点型精度陷阱:从游戏比分截取看四舍六入的真相

本文深入探讨了Lua浮点型精度问题,特别是在游戏比分截取场景中的四舍六入陷阱。通过分析银行家舍入法和浮点数二进制特性,提供了math.floor、字符串截取和取余运算三种实战解决方案,并给出工程实践建议,帮助开发者避免常见精度错误。

seed的博客 150

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c#中的浮点型转整形的舍取-四舍五入和银行家舍入

# 银行家舍入的数学背景银行家舍入(Round Half to Even)源于IEEE 754标准中的“舍入到最近,偶数优先”模式。浮点数在计算机中是以二进制表示的,许多十进制小数无法精确存储,这导致舍入操作不只是一个数学问题,更是一个二进制精度问题。## 四舍五入:我们熟悉的规则四舍五入(Round Half Up)是最常见的舍入方法:当小数部分大于等于0.5时向上舍入,小于0.5时向下舍入。在C#开发中,将浮点数转换为整数是一个极其常见的操作,但其中隐藏的舍入逻辑却常常被开发者忽视。

RtP2Vb61w的博客 239

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JavaScript 数字精度控制 | 避免银行家舍入的陷阱

本文深入探讨了JavaScript中数字精度控制的常见问题,特别是银行家舍入规则导致的精度偏差。通过分析`toFixed()`方法的局限性,提供了四种精确控制数字精度的解决方案,包括基础组合拳、重写`toFixed`方法、第三方库方案和字符串操作法。文章还针对金融计算、数据展示和统计报表等不同场景,给出了最佳实践建议,帮助开发者避免常见的精度陷阱。

weixin_28687331的博客 382

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

浮点数舍入规则_编程语言对比

为什么会有“四舍六入五成双”?“四舍六入五成双”主要应用于金融和科学计算领域,它的主要优点是在大量数据进行舍入时,可以减少累计误差。传统的“四舍五入”会有一个向上的偏向(因为“五”总是进位),而“四舍六入五成双”则能更好地平衡这种偏向,因为它一半的“五”会向上舍入,一半会向下舍入,使得总体误差更接近零。

你的每一个关注每一次观看都会支持我越来越好,关注能加快我的更新速度~ 1531

CANN/asc-devkit h2rint舍入函数API文档

<a name="table10366125861020"></a> <table><thead align="left"><tr id="row236685851016"><th class="cellrowborder" valign="top" width="57.99999999999999%" id="mcps1.1.3.1.1"><p id="p1136675820109"><a na

gitblog_00409的博客 484

JS中toFixed()方法的问题及解决方案

最近发现JS当中toFixed()方法存在一些问题,采用原生的Number对象的原型对象上的toFixed()方法时,规则并不是所谓的“四舍五入”或者是“四舍六入五成双”,所谓“四舍六入五成双”,在百度百科上给的解释是:也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:...

weixin_30567471的博客 318

C# Math.Rround函数使用记录

1.Math.Round(4.4); //Returns 4.0.Math.Round(4.5); //Returns 4.0.Math.Round(4.6); //Returns 5.0.返回值最接近参数 d 的整数。如果 d 为两个整数的中值,这两个整数一个为偶数,另一个为奇数,则返回偶数。说明:此方法的行为遵循 IEEE 标准 754 的第 4 节。这种舍入有时称为就近舍入或银行家舍

rose001的专栏 1659

初识C语言 | 第5篇

本文介绍了链表的概念及其与数组的区别,解析了typedef、void和static关键字的核心用法与禁忌,简述了浮点数舍入机制,从内存角度剖析了指针的本质与寻址原理,并结合代码示例讲解了结构体的定义及实战应用。

2301_78340276的博客 173

Qt数值笔记

【代码】C++四舍六入五成双-笔记。

lw的博客 146

Pandas浮点数显示陷阱:为什么你的0.5会被四舍五入成0?详解display.float_format的正确用法

本文深入解析Pandas浮点数显示陷阱,特别是银行家舍入法导致0.5显示为0的问题。通过详解display.float_format的正确用法,帮助开发者避免金融数据处理中的常见错误,提升数据展示的精确性和专业性。

weixin_30415113的博客 458
上一篇: Win7 64位安装VS2010出现错误failed for component Microsoft Visual Studio 2010 64bit Prer
下一篇: Ubuntu 12.04 64bit 无法安装ia32-libs 解决
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值