我认为 double 的精度导致了这个问题,正如类似帖子中所描述的那样,但我想知道是否有办法获得正确的结果。我正在使用比较两个参数并在它们相等时返回 true 的函数模板。
template <class T>
bool eq(T one, T two)
{
if (one == two)
return true;
else
return false;
}
它适用于 eq (0.8,0.8),但不适用于 eq (0.8*0.2,0.16)。正如我提到的,我假设它与 double 有关,因为它也适用于 int eq(8*2,16)。
最佳答案
首先,您应该阅读以下文章中的一篇(或两篇):What Every Computer Scientist Should Know About Floating-Point Arithmetic和 The Perils of Floating Point .
如果您正在为您的模板寻找解决方案,我建议您使用 template specialization对于 T==double
和 T==float
的情况。
关于c++ - double C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016407/