双精度C++

Kar*_*ary 2 c++ floating-point

我认为double的精度导致了这个问题,就像在类似的帖子中描述的那样,但我想知道是否有办法实现正确的结果.我正在使用比较两个参数的函数模板,如果它们相等则返回true.

template <class T>
bool eq(T one, T two)
{
  if (one == two)
    return true;
  else
    return false;
}
Run Code Online (Sandbox Code Playgroud)

它适用于eq(0.8,0.8),但它不适用于eq(0.8*0.2,0.16).正如我所提到的,我认为它与双精度有关,因为它也适用于int eq(8*2,16).

Doc*_*own 18

首先,您应该阅读这些文章中的一个(或两个):每个计算机科学家应该知道的关于浮点运算浮点运算的危险.

如果您正在寻找模板的解决方案,我建议使用模板专业化来处理T==doubleT==float.


Mar*_*ers 5

你应该很少尝试比较双打的平等.相反,您需要决定您愿意接受的误差范围:

return fabs(one - two) <= 0.000001
Run Code Online (Sandbox Code Playgroud)