c++ - double C++

标签 c++ floating-point

我认为 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 ArithmeticThe Perils of Floating Point .

如果您正在为您的模板寻找解决方案,我建议您使用 template specialization对于 T==doubleT==float 的情况。

关于c++ - double C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016407/

相关文章:

c++ - 什么是 C++ 中的接口(interface)与方法、抽象与封装

c - 除以和随后与相同 float 的乘法

python - 为真陈述而假

java - 表中异常的 float

c - 奇怪的结果打印指针作为 C 中的 float

c++ - 如何在派生类中将策略模式与附加方法一起使用

lambda 对象的 C++ 地址作为函数的参数

c++ - QMdiSubWindow中的qt定位控件

c++ - 如何在 lex 中捕获多行

types - F# Int 的平方根