You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/Module/GeoSigmaDraw/DoubleComparator.h

47 lines
851 B
C++

#include <limits>
/**
* double 对比类,它和 util.h 的 double 对比函数的差异在于,这里支持传入一个指定的精度而不采用 double 内部的精度
* 这是有时很有用,比如用户需要自己指定精度时
*/
class DoubleComparator
{
public:
explicit DoubleComparator()
: m_epsilon(std::numeric_limits<double>::epsilon())
{
}
explicit DoubleComparator(double epsilon)
: m_epsilon(epsilon)
{
}
bool IsEqual(double a, double b) const
{
return std::abs(a - b) < m_epsilon;
}
bool IsLessThan(double a, double b) const
{
return !IsEqual(a, b) && a < b;
}
bool IsLessThanOrEqual(double a, double b) const
{
return a < b || IsEqual(a, b);
}
bool IsGreaterThan(double a, double b) const
{
return !IsEqual(a, b) && a > b;
}
bool IsGreaterThanOrEqual(double a, double b) const
{
return a > b || IsEqual(a, b);
}
private:
double m_epsilon;
};