比较c ++中的两个双打不能产生正确的结果

时间:2014-03-24 18:55:38

标签: c++ comparison double equality

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

cout << a << "==" << b << ": " << (a == b) << endl;

正在输出

0.5 == 0.5: 0

为什么这会解决为假的任何想法?

1 个答案:

答案 0 :(得分:2)

为了避免在比较小数时出错,使用函数可能很有用:

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

其中EPSILON可由少数代表,例如.001

抓住this问题。

编辑:通过加入<limits>可以使用std::numeric_limits<double>::epsilon()