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.
47 lines
851 B
C++
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;
|
|
}; |