summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Base/FloatCompare.cpp')
-rw-r--r--Swiften/Base/FloatCompare.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/Swiften/Base/FloatCompare.cpp b/Swiften/Base/FloatCompare.cpp
new file mode 100644
index 0000000..ecf11c2
--- /dev/null
+++ b/Swiften/Base/FloatCompare.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2012 Yoann Blein
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#include <cmath>
+
+namespace Swift {
+
+bool approximatelyEqual(float a, float b, float epsilon) {
+ return std::fabs(a - b) <= ( (std::fabs(a) < std::fabs(b) ? std::fabs(b) : std::fabs(a)) * epsilon);
+}
+
+bool essentiallyEqual(float a, float b, float epsilon) {
+ return std::fabs(a - b) <= ( (std::fabs(a) > std::fabs(b) ? std::fabs(b) : std::fabs(a)) * epsilon);
+}
+
+bool definitelyGreaterThan(float a, float b, float epsilon) {
+ return (a - b) > ( (std::fabs(a) < std::fabs(b) ? std::fabs(b) : std::fabs(a)) * epsilon);
+}
+
+bool definitelyLessThan(float a, float b, float epsilon) {
+ return (b - a) > ( (std::fabs(a) < std::fabs(b) ? std::fabs(b) : std::fabs(a)) * epsilon);
+}
+
+}
+