C++统计list中重复元素时double相等比较结果异常问题
问题根因
这是典型的浮点数精度误差问题:
- 十进制的
0.2无法被二进制double类型精确表示,初始赋值时就带有极微小的误差 - 经过多轮乘2、减1运算后误差逐步累积,你肉眼看到打印出来的数值一致,实际两个
double变量的底层存储有极微差异,直接用==比较就会判定为不相等 - 默认
cout只输出6位小数,无法显示误差,你可以加上cout << setprecision(15);打印更高精度的数值,就能看到两个数的实际差异。
修复方法
不要直接用==比较浮点数,改为判断两个数的差值绝对值小于可接受的误差阈值即可:
- 先引入必要头文件:
#include <cmath> #include <iomanip>
- 修改相等判断逻辑:
// 阈值可根据你的精度要求调整,1e-9适合大部分普通场景 const double eps = 1e-9; if (fabs(x - y) < eps) { theCount++; }
修改后就能正常统计到重复的元素了。
内容的提问来源于stack exchange,提问作者techchris427
相关产品推荐
相关产品推荐

