Commit d1603d91 by gsell

### review floating point number comparision in BoundaryGeometry

```- use std::abs() instead of std::fabs()
- use std::signbit(n) instead (n < 0)```
parent 5d9c07f1
 ... @@ -127,12 +127,12 @@ namespace cmp_diff { ... @@ -127,12 +127,12 @@ namespace cmp_diff { inline bool almost_eq(double A, double B, double maxDiff = 1e-15, double maxRelDiff = DBL_EPSILON) { inline bool almost_eq(double A, double B, double maxDiff = 1e-15, double maxRelDiff = DBL_EPSILON) { // Check if the numbers are really close -- needed // Check if the numbers are really close -- needed // when comparing numbers near zero. // when comparing numbers near zero. const double diff = std::fabs(A - B); const double diff = std::abs(A - B); if (diff <= maxDiff) if (diff <= maxDiff) return true; return true; A = std::fabs(A); A = std::abs(A); B = std::fabs(B); B = std::abs(B); const double largest = (B > A) ? B : A; const double largest = (B > A) ? B : A; if (diff <= largest * maxRelDiff) if (diff <= largest * maxRelDiff) ... @@ -141,7 +141,7 @@ namespace cmp_diff { ... @@ -141,7 +141,7 @@ namespace cmp_diff { } } inline bool almost_eq_zero(double A, double maxDiff = 1e-15) { inline bool almost_eq_zero(double A, double maxDiff = 1e-15) { const double diff = std::fabs(A); const double diff = std::abs(A); return (diff <= maxDiff); return (diff <= maxDiff); } } ... @@ -231,7 +231,7 @@ namespace cmp_ulp { ... @@ -231,7 +231,7 @@ namespace cmp_ulp { // Check if the numbers are really close -- needed // Check if the numbers are really close -- needed // when comparing numbers near zero. // when comparing numbers near zero. if (std::fabs(A - B) <= maxDiff) if (std::abs(A - B) <= maxDiff) return true; return true; #pragma GCC diagnostic push #pragma GCC diagnostic push ... @@ -242,7 +242,7 @@ namespace cmp_ulp { ... @@ -242,7 +242,7 @@ namespace cmp_ulp { // Different signs means they do not match. // Different signs means they do not match. // Note: a negative floating point number is also negative as integer. // Note: a negative floating point number is also negative as integer. if ((aInt < 0) != (bInt < 0)) if ( std::signbit(aInt) != std::signbit(bInt)) return false; return false; // Find the difference in ULPs. // Find the difference in ULPs. ... @@ -250,7 +250,7 @@ namespace cmp_ulp { ... @@ -250,7 +250,7 @@ namespace cmp_ulp { } } inline bool almost_eq_zero(double A, double maxDiff = 1e-15) { inline bool almost_eq_zero(double A, double maxDiff = 1e-15) { return (std::fabs(A) <= maxDiff); return (std::abs(A) <= maxDiff); } } FUNC_EQ(x, y); FUNC_EQ(x, y); FUNC_EQ_ZERO(x); FUNC_EQ_ZERO(x); ... ...
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment