4#ifndef _FLOATCOMPARISON_H
5#define _FLOATCOMPARISON_H
55 return (x < T(0)) ? (-x) : x;
61 return (y > x) ? y : x;
83 return ((bits & ~top) > ebits);
91 return ((bits & ebits) != ebits);
102 return std::isfinite(x);
109#pragma GCC diagnostic push
110#pragma GCC diagnostic ignored "-Wfloat-equal"
121inline bool is_nan(
float x) {
return (x != x); }
122inline bool is_nan(
double x) {
return (x != x); }
124#pragma GCC diagnostic pop
173 return (bfi.i - afi.i);
187 if ((!is_finite_bits<T>(afi.ui) && is_finite_bits<T>(bfi.ui)) || (is_finite_bits<T>(afi.ui) && !is_finite_bits<T>(bfi.ui)))
191 if (is_nan_bits<T>(afi.ui) || is_nan_bits<T>(bfi.ui))
198 int_type difference = (bfi.i - afi.i);
199 difference = (difference < int_type(0)) ? -difference : difference;
200 return (difference <= max_ulps);
223 static const uint_type ExponentBits = (~static_cast<uint_type>(0) << std::numeric_limits<double>::digits) & ~TopBit;
224 static const uint_type MantissaBits = ~TopBit & ~ExponentBits;
250 static const uint_type MantissaBits = ~TopBit & ~ExponentBits;
IEEEFloatTraits< T >::bool_type is_equal_absolute(T a, T b, T tol=IEEEFloatTraits< T >::DefaultAbsTolerance())
Definition FloatComparison.h:136
IEEEFloatTraits< T >::bool_type is_nan_bits(const typename IEEEFloatTraits< T >::uint_type &bits)
Definition FloatComparison.h:73
IEEEFloatTraits< T >::bool_type is_equal_relative(T a, T b, T tol=IEEEFloatTraits< T >::DefaultRelTolerance())
Definition FloatComparison.h:130
bool is_zero_exact(float x)
Definition FloatComparison.h:118
IEEEFloatTraits< T >::float_type float_max(T x, T y)
Definition FloatComparison.h:59
IEEEFloatTraits< T >::bool_type is_zero_general(T x, T tol=IEEEFloatTraits< T >::DefaultRelTolerance())
Definition FloatComparison.h:154
IEEEFloatTraits< T >::float_type float_abs(T x)
Definition FloatComparison.h:53
IEEEFloatTraits< T >::int_type float_ulp_difference(T a, T b)
Definition FloatComparison.h:162
IEEEFloatTraits< T >::bool_type is_finite(T x)
Definition FloatComparison.h:97
IEEEFloatTraits< T >::bool_type is_equal_general(T a, T b, T rel_tol, T abs_tol)
Definition FloatComparison.h:142
bool is_equal_exact(float a, float b)
Definition FloatComparison.h:112
IEEEFloatTraits< T >::bool_type is_finite_bits(const typename IEEEFloatTraits< T >::uint_type &bits)
Definition FloatComparison.h:87
bool is_nan(float x)
Definition FloatComparison.h:121
IEEEFloatTraits< T >::bool_type is_equal_ulps(T a, T b, typename IEEEFloatTraits< T >::int_type max_ulps=IEEEFloatTraits< T >::DefaultUlpTolerance)
Definition FloatComparison.h:178
bool bool_type
Definition FloatComparison.h:211
uint64_t uint_type
Definition FloatComparison.h:214
static double DefaultRelTolerance()
Definition FloatComparison.h:229
int64_t int_type
Definition FloatComparison.h:213
double float_type
Definition FloatComparison.h:210
static double DefaultTolerance()
Definition FloatComparison.h:230
static double SmallestNormalisedValue()
Definition FloatComparison.h:231
static double DefaultAbsTolerance()
Definition FloatComparison.h:228
static float DefaultAbsTolerance()
Definition FloatComparison.h:254
static float DefaultTolerance()
Definition FloatComparison.h:256
int32_t int_type
Definition FloatComparison.h:239
float float_type
Definition FloatComparison.h:236
bool bool_type
Definition FloatComparison.h:237
static float DefaultRelTolerance()
Definition FloatComparison.h:255
uint32_t uint_type
Definition FloatComparison.h:240
static float SmallestNormalisedValue()
Definition FloatComparison.h:257
Definition FloatComparison.h:206
int_type i
Definition FloatComparison.h:219
uint_type ui
Definition FloatComparison.h:218
double f
Definition FloatComparison.h:217
int_type i
Definition FloatComparison.h:245
uint_type ui
Definition FloatComparison.h:244
float f
Definition FloatComparison.h:243