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)
不平等和大于方法可以简单地从中得出.
附加参数意味着您可能希望为给定的一组计算指定另一个值...应用程序范围的设置太严格.