c++中比较两个双精度值没有得到正确的结果

Comparing two doubles in c++ not yielding correct result

本文关键字:结果 双精度 比较 两个 c++      更新时间:2023-10-16

我有两个双精度值,a和b,在c++中应该是相等的,但由于某种原因没有被这样对待。以下代码:

cout << a << "==" << b << ": " << (a == b) << endl;
输出是

0.5 == 0.5: 0

知道为什么这个结果是假的吗?

为了避免在比较小数时出现错误,可以使用以下函数:

bool AreSame(double a, double b)
{
    return fabs(a - b) < EPSILON;
}

,其中EPSILON可以用一个小数字表示,例如.001

摘自这个问题

编辑:通过包含<limits>,可以使用std::numeric_limits<double>::epsilon()