From c74437aece4541f501f8a5eda80cb599fc007571 Mon Sep 17 00:00:00 2001 From: Liam Teale Date: Tue, 7 Jan 2025 12:18:31 -0800 Subject: [PATCH] add isNan constexpr function --- include/units/units.hpp | 7 +++++++ src/main.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/units/units.hpp b/include/units/units.hpp index 0a361eb..044c5d2 100644 --- a/include/units/units.hpp +++ b/include/units/units.hpp @@ -413,6 +413,13 @@ NEW_UNIT(Luminosity, candela, 0, 0, 0, 0, 0, 0, 1, 0); NEW_UNIT(Moles, mol, 0, 0, 0, 0, 0, 0, 0, 1); namespace units { +constexpr bool isNan(double lhs) { + // Use the fact that NaN is not equal to itself + return lhs != lhs; +} + +template constexpr bool isNan(const Q& lhs) { return isNan(lhs.internal()); } + template constexpr Q abs(const Q& lhs) { return Q(std::abs(lhs.internal())); } template constexpr Q max(const Q& lhs, const R& rhs) diff --git a/src/main.cpp b/src/main.cpp index 85e4c02..f4e4cee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,7 +44,7 @@ constexpr void sgnTests() { static_assert(units::sgn(15_stDeg) == 1); static_assert(units::sgn(-15_m) == -1); static_assert(units::sgn(0_kg) == 0); - static_assert(std::isnan(units::sgn(std::numeric_limits::quiet_NaN()))); + static_assert(units::isNan(units::sgn(std::numeric_limits::quiet_NaN()))); static_assert(units::sgn(std::numeric_limits::infinity()) == 1); static_assert(units::sgn(-std::numeric_limits::infinity()) == -1); }