From 35eeb79a7bba4ab092b797f2887d1c5cc836b018 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 25 Mar 2021 15:29:56 -0700 Subject: [PATCH] fuzzyEqual handle zero better --- util/Fuzzy.cc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/util/Fuzzy.cc b/util/Fuzzy.cc index b3529d06..2c4ff893 100644 --- a/util/Fuzzy.cc +++ b/util/Fuzzy.cc @@ -26,19 +26,27 @@ namespace sta { using std::max; using std::abs; +constexpr static float float_equal_tolerance = 1E-15F; + bool fuzzyEqual(float v1, float v2) { - return v1 == v2 - || abs(v1 - v2) < 1E-6F * max(abs(v1), abs(v2)); + if (v1 == v2) + return true; + else if (v1 == 0.0) + return abs(v2) < float_equal_tolerance; + else if (v2 == 0.0) + return abs(v1) < float_equal_tolerance; + else + return abs(v1 - v2) < 1E-6F * max(abs(v1), abs(v2)); } bool fuzzyZero(float v) { return v == 0.0 - || abs(v) < 1E-15F; + || abs(v) < float_equal_tolerance; } bool