You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++统计list中重复元素时double相等比较结果异常问题

问题根因

这是典型的浮点数精度误差问题:

  • 十进制的0.2无法被二进制double类型精确表示,初始赋值时就带有极微小的误差
  • 经过多轮乘2、减1运算后误差逐步累积,你肉眼看到打印出来的数值一致,实际两个double变量的底层存储有极微差异,直接用==比较就会判定为不相等
  • 默认cout只输出6位小数,无法显示误差,你可以加上cout << setprecision(15);打印更高精度的数值,就能看到两个数的实际差异。

修复方法

不要直接用==比较浮点数,改为判断两个数的差值绝对值小于可接受的误差阈值即可:

  1. 先引入必要头文件:
#include <cmath>
#include <iomanip>
  1. 修改相等判断逻辑:
// 阈值可根据你的精度要求调整,1e-9适合大部分普通场景
const double eps = 1e-9;
if (fabs(x - y) < eps) {
    theCount++;
}

修改后就能正常统计到重复的元素了。

内容的提问来源于stack exchange,提问作者techchris427

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:42:00