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==double和T==float.
你应该很少尝试比较双打的平等.相反,您需要决定您愿意接受的误差范围:
return fabs(one - two) <= 0.000001
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |