12 #define NEM_INLINE inline
17#if defined(NEM_ERR_THROW)
23#if defined(NEM_ERR_LOG)
29#if defined(NEM_ERR_USE_NAN)
35#if defined(NEM_ERR_SAFE_FALLBACK)
41#if defined(NEM_CPP_STRING)
52#if defined(NEM_USE_DOUBLE_PRECISION)
58 concept scalar_type = std::integral<T> || std::floating_point<T>;
74 template <nem::scalar_type T>
79 if constexpr (std::is_floating_point_v<T>)
89 template <nem::scalar_type T>
92 if constexpr (std::is_same_v<T, float>)
return T{ 1e-6f };
93 else if constexpr (std::is_same_v<T, double>)
return T{ 1e-9 };
94 else if constexpr (std::is_same_v<T, long double>)
return T{ 1e-14 };
103 template <nem::scalar_type T>
106 if constexpr (std::is_same_v<T, float>)
return T{ 3.0e-2f };
107 else if constexpr (std::is_same_v<T, double>)
return T{ 3e-3 };
108 else if constexpr (std::is_same_v<T, long double>)
return T{ 1e-4 };
112 template <nem::scalar_type T>
126 template <nem::scalar_type T>
129 if constexpr (std::is_same_v<T, float>)
return T{ 8.0e-3f };
130 else if constexpr (std::is_same_v<T, double>)
return T{ 5e-4 };
131 else if constexpr (std::is_same_v<T, long double>)
return T{ 1e-5 };
135 template <nem::scalar_type T>
143 template <nem::scalar_type T, nem::Precision Prec = nem::default_precision>
157 template <nem::scalar_type T, nem::Precision Prec = nem::default_precision>
171 template <
class From,
class To>
173 : std::integral_constant<bool, (std::is_floating_point_v<To>
174 ? std::is_floating_point_v<From> || std::is_integral_v<From>
175 : ((std::is_integral_v<To> ? std::is_integral_v<From> : false)))>
179 template <
class From,
class To>
constexpr nem::Precision mode
constexpr T rel_error(T x)
constexpr T rel_error(T x)
constexpr nem::Precision mode
constexpr bool ERR_SAFE_FALLBACK
constexpr nem::Precision default_precision
constexpr bool is_subset_of_v
constexpr T abs_to_rel_error(T x, T abs_error)
constexpr bool USE_C_STRING
constexpr unsafe_t unsafe
const char * GET_C_STRING(nem_string str)
constexpr bool ERR_USE_NAN
constexpr T rel_error(T x)
constexpr safe_t()=default
constexpr unsafe_t()=default