NumCpp  2.11.0
A Templatized Header Only C++ Implementation of the Python NumPy Library
essentiallyEqual.hpp
Go to the documentation of this file.
1 #pragma once
29 
30 #include <cmath>
31 #include <complex>
32 #include <string>
33 
36 
37 namespace nc::utils
38 {
39  //============================================================================
47  template<typename dtype, std::enable_if_t<std::is_integral<dtype>::value, int> = 0>
48  bool essentiallyEqual(dtype inValue1, dtype inValue2) noexcept
49  {
50  return inValue1 == inValue2;
51  }
52 
53  //============================================================================
62  template<typename dtype, std::enable_if_t<std::is_floating_point<dtype>::value, int> = 0>
63  bool essentiallyEqual(dtype inValue1, dtype inValue2, dtype inEpsilon) noexcept
64  {
65  const auto absValue1 = std::abs(inValue1);
66  const auto absValue2 = std::abs(inValue2);
67  return std::abs(inValue1 - inValue2) <= ((absValue1 > absValue2 ? absValue2 : absValue1) * std::abs(inEpsilon));
68  }
69 
70  //============================================================================
78  template<typename dtype, std::enable_if_t<std::is_floating_point<dtype>::value, int> = 0>
79  bool essentiallyEqual(dtype inValue1, dtype inValue2) noexcept
80  {
81  return essentiallyEqual(inValue1, inValue2, DtypeInfo<dtype>::epsilon());
82  }
83 } // namespace nc::utils
Holds info about the dtype.
Definition: DtypeInfo.hpp:41
Definition: Utils/cube.hpp:33
bool essentiallyEqual(dtype inValue1, dtype inValue2) noexcept
Definition: essentiallyEqual.hpp:48
auto abs(dtype inValue) noexcept
Definition: abs.hpp:49