如何比较浮点数或双精度数? [复制]

Posted

技术标签:

【中文标题】如何比较浮点数或双精度数? [复制]【英文标题】:How to compare float or double? [duplicate] 【发布时间】:2014-04-25 13:54:08 【问题描述】:

是否有内置库可以比较float或double

我认为像a == ba !=b 这样比较没有任何意义。有什么建议吗?

【问题讨论】:

【参考方案1】:

比较浮点数或双精度数的技术是使用fabs

bool isEqual(const float a,const float b)

    return fabs(a - b) < std::numeric_limits<float>::epsilon();

您可以将 epsilon 用于 std::numeric_limits 中的浮点数或双精度数

【讨论】:

【参考方案2】:

我使用这个功能:

template <typename T>
bool approx(const T& x, const T& y, const T& eps = 1.0e-10)

  if(x == y)
    return true;
  if(x == 0.0)
    return (y < 0.0 ? -y : y) < eps;
  if(y == 0.0)
    return (x < 0.0 ? -x : x) < eps;
  return (x < y ? y - x : x - y) < eps * ((x < 0.0 ? -x : x) + (y < 0.0 ? -y : y)) / 2.0;

【讨论】:

这个函数看起来比它需要的复杂得多。【参考方案3】:

你可以简单地使用:

fabs(a-b) < eps  // eps is the precision you want to achieve

【讨论】:

以上是关于如何比较浮点数或双精度数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中,如何将浮点数或双精度数除以 2 的 i 次幂?

可以采用整数或浮点数或双精度数或任何其他可转换为浮点数的 C++ 函数

浮点数比较大小的问题

比较c ++中的两个浮点数/双精度数[重复]

如何正确地将作为 CSV 文件中字符串的浮点数/双精度数作为浮点数/双精度数导入程序?

VB单精度、双精度浮点数误差,如何消除