diff --git a/include/MantleAPI/Common/floating_point_helper.h b/include/MantleAPI/Common/floating_point_helper.h index dc6e61f6a5196f8b56b7b88e685f48d731a5298a..e0c4e6f51440239436205a11a8bc2aa34745518e 100644 --- a/include/MantleAPI/Common/floating_point_helper.h +++ b/include/MantleAPI/Common/floating_point_helper.h @@ -43,7 +43,7 @@ namespace details { template <typename T, std::enable_if_t<std::is_arithmetic_v<T>, bool> = true> -constexpr int signum(const T value) +constexpr int signum(const T value) noexcept { return (T{0} < value) - (value < T{0}); } @@ -62,7 +62,7 @@ inline constexpr auto kDefaultEps = MANTLE_API_DEFAULT_EPS; /// \param[in] epsilon The epsilon for floating-point comparison. Defaults to kDefaultEps. /// template <typename T, std::enable_if_t<std::is_floating_point_v<T>, bool> = true> -constexpr bool AlmostEqual(const T lhs, const T rhs, const T epsilon = static_cast<T>(kDefaultEps)) +constexpr bool AlmostEqual(const T lhs, const T rhs, const T epsilon = static_cast<T>(kDefaultEps)) noexcept { // Handle NaN. // NaN should never be equal to anything. @@ -103,7 +103,7 @@ constexpr bool AlmostEqual(const T lhs, const T rhs, const T epsilon = static_ca /// \param[in] epsilon The epsilon for floating-point comparison. Defaults to kDefaultEps. /// template <typename T, std::enable_if_t<std::is_floating_point_v<T>, bool> = true> -constexpr bool GreaterOrEqual(const T lhs, const T rhs, const T epsilon = static_cast<T>(kDefaultEps)) +constexpr bool GreaterOrEqual(const T lhs, const T rhs, const T epsilon = static_cast<T>(kDefaultEps)) noexcept { if (lhs > rhs) { @@ -121,7 +121,7 @@ constexpr bool GreaterOrEqual(const T lhs, const T rhs, const T epsilon = static /// \param[in] epsilon The epsilon for floating-point comparison. Defaults to kDefaultEps. /// template <typename T, std::enable_if_t<std::is_floating_point_v<T>, bool> = true> -constexpr bool LessOrEqual(const T lhs, const T rhs, const T epsilon = static_cast<T>(kDefaultEps)) +constexpr bool LessOrEqual(const T lhs, const T rhs, const T epsilon = static_cast<T>(kDefaultEps)) noexcept { if (lhs < rhs) { @@ -139,7 +139,7 @@ constexpr bool LessOrEqual(const T lhs, const T rhs, const T epsilon = static_ca /// \param[in] epsilon The epsilon for floating-point comparison. Defaults to kDefaultEps. /// template <typename T, std::enable_if_t<units::traits::is_unit_t<T>::value, bool> = true> -constexpr bool AlmostEqual(const T lhs, const T rhs, const T epsilon = T{kDefaultEps}) +constexpr bool AlmostEqual(const T lhs, const T rhs, const T epsilon = T{kDefaultEps}) noexcept { return AlmostEqual(lhs(), rhs(), epsilon()); } @@ -152,7 +152,7 @@ constexpr bool AlmostEqual(const T lhs, const T rhs, const T epsilon = T{kDefaul /// \param[in] epsilon The epsilon for floating-point comparison. Defaults to kDefaultEps. /// template <typename T, std::enable_if_t<units::traits::is_unit_t<T>::value, bool> = true> -constexpr bool GreaterOrEqual(const T lhs, const T rhs, const T epsilon = T{kDefaultEps}) +constexpr bool GreaterOrEqual(const T lhs, const T rhs, const T epsilon = T{kDefaultEps}) noexcept { return GreaterOrEqual(lhs(), rhs(), epsilon()); } @@ -165,7 +165,7 @@ constexpr bool GreaterOrEqual(const T lhs, const T rhs, const T epsilon = T{kDef /// \param[in] epsilon The epsilon for floating-point comparison. Defaults to kDefaultEps. /// template <typename T, std::enable_if_t<units::traits::is_unit_t<T>::value, bool> = true> -constexpr bool LessOrEqual(const T lhs, const T rhs, const T epsilon = T{kDefaultEps}) +constexpr bool LessOrEqual(const T lhs, const T rhs, const T epsilon = T{kDefaultEps}) noexcept { return LessOrEqual(lhs(), rhs(), epsilon()); }