0

0

C++浮点数精度问题解析_C++小数运算误差说明

舞夢輝影

舞夢輝影

发布时间:2026-01-04 14:30:03

|

477人浏览过

|

来源于php中文网

原创

浮点数在C++中用二进制近似表示十进制小数,存在固有误差;0.1和0.2在二进制中为无限循环小数,无法精确存储,导致0.1+0.2≠0.3;应使用误差范围abs(a-b)

c++浮点数精度问题解析_c++小数运算误差说明

浮点数在C++中不是精确表示小数的工具,而是用二进制近似存储十进制小数,因此几乎所有小数运算都存在固有误差。这不是bug,而是IEEE 754标准下的正常现象。

为什么0.1 + 0.2 != 0.3?

十进制小数0.1在二进制中是无限循环小数(类似十进制里的1/3 = 0.333…),无法用有限位数精确表示。float通常只有约7位有效数字,double约15–17位,超出部分被截断或舍入,导致计算结果偏差。

  • 例如:0.1f + 0.2f 实际得到的是0.30000001192092896(float精度下)
  • 0.1 + 0.2 == 0.3 判断几乎总是false

如何安全地比较浮点数?

不用==直接比较,改用“是否落在某个误差范围内”:

  • 定义一个极小值eps,比如1e-6(float)或1e-9(double)
  • 写成:abs(a - b)
  • 更稳妥的做法是用相对误差:abs(a - b) ,避免大数或接近零时失效

哪些操作会放大误差?

误差会在多次运算中累积或放大:

Akkio
Akkio

Akkio 是一个无代码 AI 的全包平台,任何人都可以在几分钟内构建和部署AI

下载

立即学习C++免费学习笔记(深入)”;

  • 大量加减小数值(如累加1e-6重复100万次)
  • 相近大数相减(如1000000.0000001 - 1000000.0,有效位大幅损失)
  • 用float做中间计算再转double——精度已在float阶段丢失,提升类型无用

什么情况下该换方案?

如果业务要求精确小数行为(如金融计算、配置解析、测试断言),别硬扛浮点误差:

  • 用整数代替:金额存“分”而非“元”,比例用万分比(1234代表12.34%)
  • 用字符串或专用库:如boost::multiprecision::cpp_dec_floatdecimal类(C++23正在标准化)
  • 输入时就转整数:std::stof("0.1")仍是近似值,不如解析字符串后按小数位乘10^n转整型

基本上就这些。理解浮点数是“近似容器”而非“小数计算器”,很多奇怪结果就变得合理了。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

554

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

97

2025.10.23

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

49

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

97

2025.10.23

免费看漫画app合集_2026免费漫画app排行榜入口
免费看漫画app合集_2026免费漫画app排行榜入口

2026年免费漫画APP合集来啦!为你精心整理最新免费漫画APP排行榜入口,涵盖漫蛙漫画、香香漫画、包子漫画等热门神器,海量正版国漫、日漫、韩漫资源全免费阅读,无需付费解锁章节!高清全彩画质、每日极速更新,支持离线下载、智能推荐、条漫阅读模式,热血、恋爱、悬疑、古风、搞笑等题材应有尽有。无论你是追新番老粉还是小白漫迷,这里都能让你一站式追漫到爽,告别广告干扰和会员套路!赶紧点击入口下载体验,开启2026无限免费漫画之旅吧!

14

2026.01.07

Java响应式编程Project Reactor_Java响应式编程怎么用Project Reactor
Java响应式编程Project Reactor_Java响应式编程怎么用Project Reactor

Project Reactor是基于Java的非阻塞响应式编程库,实现了 Reactive Streams规范,通过Flux (0..N元素流) 和 Mono (0..1元素流) 抽象,提供了丰富的操作符来处理异步数据流,是构建高效、事件驱动、支持背压的现代JVM应用(特别是与Spring WebFlux集成)的基础。

1

2026.01.07

Python 深度学习框架与TensorFlow入门
Python 深度学习框架与TensorFlow入门

本专题深入讲解 Python 在深度学习与人工智能领域的应用,包括使用 TensorFlow 搭建神经网络模型、卷积神经网络(CNN)、循环神经网络(RNN)、数据预处理、模型优化与训练技巧。通过实战项目(如图像识别与文本生成),帮助学习者掌握 如何使用 TensorFlow 开发高效的深度学习模型,并将其应用于实际的 AI 问题中。

4

2026.01.07

Python 深度学习框架与TensorFlow入门
Python 深度学习框架与TensorFlow入门

本专题深入讲解 Python 在深度学习与人工智能领域的应用,包括使用 TensorFlow 搭建神经网络模型、卷积神经网络(CNN)、循环神经网络(RNN)、数据预处理、模型优化与训练技巧。通过实战项目(如图像识别与文本生成),帮助学习者掌握 如何使用 TensorFlow 开发高效的深度学习模型,并将其应用于实际的 AI 问题中。

0

2026.01.07

漫蛙2入口地址合集
漫蛙2入口地址合集

本专题整合了漫蛙2入口汇总,阅读专题下面的文章了解更多详细内容。

193

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.4万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号