STL,BOOST中的浮点比较

ful*_*ton 9 c++ floating-point

在STL或Boost中是否有一组通用的简单比较函数?

我发现的那个总是需要模板参数和/或结构模板的实例化.

我正在寻找具有如下语法的东西:

if ( is_equal(x,y) )
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

哪个可以实现为:

template <typename T>
bool is_equal(const T& x, const T& y)
{
    return ( fabs(x - y) < Precision<T>::eps );
}
Run Code Online (Sandbox Code Playgroud)

编辑:我将运算符更改为相等.(见下面的评论)

Mat*_* M. 10

我不知道有没有这样做的图书馆,也许是因为它像一个班轮一样简单,或者也许是因为它被遗忘了......

一般情况下,您是否确定要在整个应用程序中为给定值的某个给定类型设置epsilon?就个人而言,我想根据我正在进行的操作来自定义它(即使默认值很好).

至于您的操作员,为什么不自己设计呢?

template <class T>
bool rough_eq(T lhs, T rhs, T epsilon = Precision<T>::epsilon) // operator==
{ 
  return fabs(lhs - rhs) < epsilon;
}

template <class T>
bool rough_lt(T lhs, T rhs, T epsilon = Precision<T>::epsilon) // operator<
{
  return rhs - lhs >= epsilon;
       // tricky >= because if the difference is equal to epsilon
       // then they are not equal per the rough_eq method
}

template <class T>
bool rough_lte(T lhs, T rhs, T epsilon = Precision<T>::epsilon) // operator<=
{
  return rhs - lhs > -epsilon;
}
Run Code Online (Sandbox Code Playgroud)

不平等和大于方法可以简单地从中得出.

附加参数意味着您可能希望为给定的一组计算指定另一个值...应用程序范围的设置太严格.