45 int32_t a_int = *
reinterpret_cast<const int32_t *
>(&left);
48 a_int =
static_cast<int32_t
>(0x80000000 -
static_cast<uint32_t
>(a_int));
52 int32_t b_int = *
reinterpret_cast<const int32_t *
>(&right);
54 b_int =
static_cast<int32_t
>(0x80000000 -
static_cast<uint32_t
>(b_int));
56 int32_t int_diff = abs(a_int - b_int);
57 if (int_diff <= max_ulps && -max_ulps <= int_diff) {
71 int64_t a_int = *
reinterpret_cast<const int64_t *
>(&left);
74 a_int =
static_cast<int64_t
>(0x8000000000000000LL -
static_cast<uint64_t
>(a_int));
78 int64_t b_int = *
reinterpret_cast<const int64_t *
>(&right);
80 b_int =
static_cast<int64_t
>(0x8000000000000000LL -
static_cast<uint64_t
>(b_int));
82 int64_t int_diff = abs(a_int - b_int);
83 if (int_diff <= max_ulps && -max_ulps <= int_diff) {
Floating point comparison implementations.
template bool realBitWiseEqual< float >(const float &left, const float &right)
bool almostEqual2sComplement(ELEMENTS_UNUSED const FloatType &a, ELEMENTS_UNUSED const FloatType &b, ELEMENTS_UNUSED const std::size_t &max_ulps=0)
ELEMENTS_API const double FLT_DEFAULT_TEST_TOLERANCE
Single precision float default test tolerance.
ELEMENTS_API const double DBL_DEFAULT_TEST_TOLERANCE
Double precision float default test tolerance.
template bool realBitWiseEqual< double >(const double &left, const double &right)