惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
T
Troy Hunt's Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Hacker News: Front Page
TaoSecurity Blog
TaoSecurity Blog
PCI Perspectives
PCI Perspectives
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Vulnerabilities – Threatpost
博客园 - 【当耐特】
V
Visual Studio Blog
N
News and Events Feed by Topic
Security Archives - TechRepublic
Security Archives - TechRepublic
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
WordPress大学
WordPress大学
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
P
Proofpoint News Feed
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes
Last Week in AI
Last Week in AI
T
Tenable Blog
K
Kaspersky official blog
爱范儿
爱范儿
S
Security @ Cisco Blogs
Spread Privacy
Spread Privacy
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
W
WeLiveSecurity
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
小众软件
小众软件
Webroot Blog
Webroot Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs

博客园 - 鹅要长大

【ubuntu基础】使用sshfs挂载远程主机目录 【c++编程基础】理解lambda表达式 【c++编程基础】字节对齐pack的理解 【c++编程基础】虚函数virtual的理解与使用 【linux基础知识】理解nohup 【linux基础】如何理解python train_dtld.py 2>&1 | tee my_error_log.txt 【工具使用】docker的使用 【ubuntu工具】ubuntu好用工具总结 【ubuntu基础工具使用】ubuntu中screen的安装与使用 【linux操作基础】多目录文件复制且同名不覆盖 【linux基础操作】windows系统生成的txt文件在ubuntu打开乱码 【opencv编程基础】fillpoly和polylines函数的理解 【c++编程基础】std::unique的理解 【编程基础】计算三个顶点之间的夹角 【计算几何算法】道格拉斯普克(Douglas-Peuker)算法 [c++]c++ 工程代码中的debug时条件编译隐去的代码会影响程序运行的性能和耗时吗 【CV基础】语义分割任务计算类别权重 【opencv基础】resize使用的问题 git stash的用法 gflags的使用 opencv 判断某个坐标点是否在多边形内cv::pointPolygonTest 判断多边形的顶点内外角点以及对approxPolyDP函数的理解 用Python从零实现贝叶斯分类器 【CV数据集】智慧城市之CCPD车牌数据集
【基础算法】银行家舍入法
鹅要长大 · 2026-04-01 · via 博客园 - 鹅要长大

前言

阅读地平线工具链文档,使用银行家舍入法(四舍六入五成双),其设计初衷是解决传统四舍五入的 “系统性偏差”,通过奇偶平衡规则,使大量数据舍入后的均值更接近原始值,尤其适用于金融、科学计算等对精度要求极高的场景。​本文对此算法进行介绍。

关键规则

关键规则即五成双,当需要舍弃的部分恰好等于保留部分最后一位的 0.5 时(即“中间值”),则采取 “向最近的偶数舍入”

- 如果保留部分的最后一位(舍入前)是奇数,则进位(使其变为偶数)。
- 如果保留部分的最后一位(舍入前)是偶数,则直接舍去(保持偶数)。
- 目的:使结果末位为偶数,从而在统计上减少系统性的舍入偏差。
- 原因:在金融、统计和科学计算中,如果对大量以 .5结尾的数据进行传统“四舍五入”,由于总是向上进位,会系统性地导致结果偏高,产生累积误差。“五成双”规则使得 .5有一半概率进位,一半概率舍去,从统计上消除了这种系统性偏差,使结果更精确、更公平。

代码

// 使用“四舍六入五成双”的规则,将浮点数 input舍入到最接近的整数值,并以浮点数的形式返回结果,且不引发浮点异常。
static inline float32_t _round(float32_t const input) {
  std::fesetround(FE_TONEAREST); // 设置浮点环境的舍入模式
  float32_t const result{std::nearbyintf(input)}; // C标准库数学函数
  return result;
}

注意点:

  • std::fesetround设置的是全局浮点环境,可能会影响该线程中其他地方的浮点计算。在修改前后,有时需要保存和恢复原来的舍入模式。
  • FE_TONEAREST是一个宏,代表 “向最接近的可表示值舍入” 模式,即四舍六入五成双”“银行家舍入法” (Banker‘s Rounding)或 “向最接近的偶数舍入” (Round to nearest, ties to even)。
  • 关键特性std::nearbyintf函数不会引发不精确浮点异常(FE_INEXACT),这也是它和 std::rintf的一个主要区别。

参考

1. round(37.1455, 3)为什么是37.145(银行家舍入法)

各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。

Simple is clean. Complex is clever.
Logic & Aesthetics
Seeking Ground Truth within the pixels.

版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/