51double _ScaleEpsilon(
double x1,
double x2,
double epsilon) {
55 (void) std::frexp(std::fabs(x1) < std::fabs(x2) ? x1 : x2, &exponent);
58 return std::ldexp(epsilon, exponent);
61float _ScaleEpsilon(
float x1,
float x2,
float epsilon) {
65 (void) std::frexp(std::fabs(x1) < std::fabs(x2) ? x1 : x2, &exponent);
68 return std::ldexp(epsilon, exponent);
71bool Equal(
double x1,
double x2,
double epsilon)
76 return std::fabs(x1 - x2) <= _ScaleEpsilon(x1, x2, epsilon);
79bool Equal(
float x1,
float x2,
float epsilon)
84 return std::fabs(x1 - x2) <= _ScaleEpsilon(x1, x2, epsilon);