core: fix absdiff (non-optimized, fp) to prevent "-0" results
authorAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 23 Nov 2016 10:43:08 +0000 (13:43 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 23 Nov 2016 10:55:38 +0000 (13:55 +0300)
modules/core/src/arithm_core.hpp

index b92d47a..99b564c 100644 (file)
@@ -97,6 +97,22 @@ template<typename T> struct OpAbsDiff
     T operator()(T a, T b) const { return a > b ? a - b : b - a; }
 };
 
+// specializations to prevent "-0" results
+template<> struct OpAbsDiff<float>
+{
+    typedef float type1;
+    typedef float type2;
+    typedef float rtype;
+    float operator()(float a, float b) const { return std::abs(a - b); }
+};
+template<> struct OpAbsDiff<double>
+{
+    typedef double type1;
+    typedef double type2;
+    typedef double rtype;
+    double operator()(double a, double b) const { return std::abs(a - b); }
+};
+
 template<typename T> struct OpAnd
 {
     typedef T type1;