#include /** * double 对比类,它和 util.h 的 double 对比函数的差异在于,这里支持传入一个指定的精度而不采用 double 内部的精度 * 这是有时很有用,比如用户需要自己指定精度时 */ class DoubleComparator { public: explicit DoubleComparator() : m_epsilon(std::numeric_limits::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; };