26 #ifndef DOXYGEN_SHOULD_SKIP_THIS
27 using std::numeric_limits;
30 using std::fpclassify;
46 template <
typename T> T
NaN();
52 template <
typename T> T
Inf();
78 #ifndef DOXYGEN_SHOULD_SKIP_THIS
79 template <>
inline float NaN() {
return numeric_limits<float>::quiet_NaN(); }
80 template <>
inline double NaN() {
return numeric_limits<double>::quiet_NaN(); }
82 template <>
inline float Inf() {
return numeric_limits<float>::infinity(); }
83 template <>
inline double Inf() {
return numeric_limits<double>::infinity(); }
85 template <>
inline float machine_eps() {
return numeric_limits<float>::epsilon(); }
86 template <>
inline double machine_eps() {
return numeric_limits<double>::epsilon(); }
88 template <>
inline float sqrt_machine_eps() {
return sqrt(numeric_limits<float>::epsilon()); }
89 template <>
inline double sqrt_machine_eps() {
return sqrt(numeric_limits<double>::epsilon()); }
91 template <>
inline float maximum_value() {
return sqrt(numeric_limits<float>::max()); }
92 template <>
inline double maximum_value() {
return sqrt(numeric_limits<double>::max()); }
94 template <>
inline float minimum_value() {
return sqrt(numeric_limits<float>::min()); }
95 template <>
inline double minimum_value() {
return sqrt(numeric_limits<double>::min()); }
102 static inline bool is_zero(
double x) {
return FP_ZERO == fpclassify(x); }
108 static inline bool is_zero(
float x) {
return FP_ZERO == fpclassify(x); }
114 static inline bool is_NaN(
double x) {
return std::isnan(x); }
120 static inline bool is_NaN(
float x) {
return std::isnan(x); }
126 static inline bool is_infinite(
double x) {
return std::isinf(x); }
132 static inline bool is_infinite(
float x) {
return std::isinf(x); }
138 static inline bool is_normal(
double x) {
return std::isnormal(x); }
144 static inline bool is_normal(
float x) {
return std::isnormal(x); }
150 static inline bool is_finite(
double x) {
return std::isfinite(x); }
156 static inline bool is_finite(
float x) {
return std::isfinite(x); }
162 static inline bool is_integer(
double x) {
return is_zero(x - floor(x)); }
168 static inline bool is_integer(
float x) {
return is_zero(x - floor(x)); }
174 static inline bool is_unsigned(
double x) {
return is_integer(x) && x >= 0; }
180 static inline bool is_unsigned(
float x) {
return is_integer(x) && x >= 0; }
205 void check_NaN(
double const* pv, string_view v_name,
int DIM,
int line, string_view file );
214 void check_NaN(
float const* pv, string_view v_name,
int DIM,
int line, string_view file );
219 static double const m_e = 2.718281828459045235360287471352662497757;
222 static double const m_pi = 3.141592653589793238462643383279502884197;
225 static double const m_2pi = 6.283185307179586476925286766559005768394;
228 static double const m_pi_2 = 1.570796326794896619231321691639751442098;
231 static double const m_pi_4 = 0.7853981633974483096156608458198757210492;
234 static double const m_1_pi = 0.3183098861837906715377675267450287240689;
237 static double const m_2_pi = 0.6366197723675813430755350534900574481378;
240 static double const m_sqrtpi = 1.772453850905516027298167483341145182798;
243 static double const m_2_sqrtpi = 1.128379167095512573896158903121545171688;
246 static double const m_sqrt2 = 1.414213562373095048801688724209698078570;
249 static double const m_1_sqrt2 = 0.7071067811865475244008443621048490392850;
251 #ifdef UTILS_OLD_CAMELCASE
257 template <
typename T>
inline T machineEps() {
return machine_eps<T>(); }
271 template <
typename T>
inline T maximumValue() {
return maximum_value<T>(); }
278 template <
typename T>
inline T minimumValue() {
return minimum_value<T>(); }
285 static inline bool isZero(
double x) {
return is_zero(x); }
292 static inline bool isZero(
float x) {
return is_zero(x); }
299 static inline bool isInfinite(
double x) {
return is_infinite(x); }
306 static inline bool isInfinite(
float x) {
return is_infinite(x); }
313 static inline bool isNaN(
double x) {
return is_NaN(x); }
320 static inline bool isNaN(
float x) {
return is_NaN(x); }
327 static inline bool isFinite(
double x) {
return is_finite(x); }
334 static inline bool isFinite(
float x) {
return is_finite(x); }
341 static inline bool isRegular(
double x) {
return is_finite(x); }
348 static inline bool isRegular(
float x) {
return is_finite(x); }
355 static inline bool isInteger(
double x) {
return is_integer(x); }
362 static inline bool isInteger(
float x) {
return is_integer(x); }
369 static inline bool isUnsigned(
double x) {
return is_unsigned(x); }
376 static inline bool isUnsigned(
float x) {
return is_unsigned(x); }
384 static inline bool foundNaN(
double const* pv,
int DIM) {
return found_NaN(pv, DIM); }
392 static inline bool foundNaN(
float const* pv,
int DIM) {
return found_NaN(pv, DIM); }
402 static inline void checkNaN(
double const* pv, string_view v_name,
int DIM,
int line, string_view file ) {
414 static inline void checkNaN(
float const* pv, string_view v_name,
int DIM,
int line, string_view file ) {
Definition SystemUtils.cc:39
bool found_NaN(double const *pv, int DIM)
void check_NaN(double const *pv, string_view v_name, int DIM, int line, string_view file)