41 constexpr
double kPMRealEpsilon = 1.0e-8;
42 constexpr
double kPMPi = 3.141592653589793238462643383279502884197169399375105820974944;
43 constexpr
double kPMMaxReal = 8.9884656743115795e+307;
96 constexpr
PMReal() noexcept : fRealValue(0.0)
113 constexpr
PMReal(
double d) noexcept : fRealValue(d)
344 friend bool16 operator ==(const
PMReal& a, const
PMReal& b) noexcept;
353 friend bool16 operator !=(const
PMReal& a, const
PMReal& b) noexcept;
362 friend bool16 operator <(const
PMReal& a, const
PMReal& b) noexcept;
371 friend bool16 operator >(const
PMReal& a, const
PMReal& b) noexcept;
381 friend bool16 operator <=(const
PMReal& a, const
PMReal& b) noexcept;
391 friend bool16 operator >=(const
PMReal& a, const
PMReal& b) noexcept;
429 ASSERT_MSG(kDefaultFPUExceptions == _controlfp(0, 0), FORMAT_ARGS(
"Unexpected floating point control word! You may see floating point exceptions (actual:0x%8.8X expected:0x%8.8X)",_controlfp(0, 0), kDefaultFPUExceptions));
432 return -r.fRealValue;
439 ASSERT_MSG(kDefaultFPUExceptions == _controlfp(0, 0), FORMAT_ARGS(
"Unexpected floating point control word! You may see floating point exceptions (actual:0x%8.8X expected:0x%8.8X)",_controlfp(0, 0), kDefaultFPUExceptions));
442 return a.fRealValue + b.fRealValue;
449 ASSERT_MSG(kDefaultFPUExceptions == _controlfp(0, 0), FORMAT_ARGS(
"Unexpected floating point control word! You may see floating point exceptions (actual:0x%8.8X expected:0x%8.8X)",_controlfp(0, 0), kDefaultFPUExceptions));
452 return a.fRealValue - b.fRealValue;
459 ASSERT_MSG(kDefaultFPUExceptions == _controlfp(0, 0), FORMAT_ARGS(
"Unexpected floating point control word! You may see floating point exceptions (actual:0x%8.8X expected:0x%8.8X)",_controlfp(0, 0), kDefaultFPUExceptions));
462 return a.fRealValue * b.fRealValue;
469 ASSERT_MSG(kDefaultFPUExceptions == _controlfp(0, 0), FORMAT_ARGS(
"Unexpected floating point control word! You may see floating point exceptions (actual:0x%8.8X expected:0x%8.8X)",_controlfp(0, 0), kDefaultFPUExceptions));
472 return a.fRealValue / b.fRealValue;
480 return ::floor (a.fRealValue);
485 return (a.fRealValue > 0.0 && a.fRealValue !=
double(int32(a.fRealValue)) ? int32(a.fRealValue + 1.0) : int32(a.fRealValue));
490 PMReal r(a.fRealValue + 0.5);
498 return ::fabs(a.fRealValue);
503 return ::Round (a / factor) * factor;
509 return ::fmod(a.fRealValue, b.fRealValue);
515 ASSERT(static_cast<int32>(r.fRealValue) >= kMinInt16);
516 ASSERT(static_cast<int32>(r.fRealValue) <= kMaxInt16);
519 return int32(a.fRealValue);
529 return (
float) r.fRealValue;
534 ASSERT(r.fRealValue >= kMinInt16);
535 ASSERT(r.fRealValue <= kMaxInt16);
537 return (int16) r.fRealValue;
542 ASSERT(r.fRealValue >= 0.0);
543 ASSERT(r.fRealValue <= kMaxUInt16);
545 return (uint16) r.fRealValue;
550 ASSERT_MSG(r.fRealValue >= kMinInt32, FORMAT_ARGS(
"Value %4.4f is too small to convert to int32",r.fRealValue));
551 ASSERT_MSG(r.fRealValue <= kMaxInt32, FORMAT_ARGS(
"Value %4.4f is too large to convert to int32",r.fRealValue));
553 return (int32) r.fRealValue;
558 ASSERT(r.fRealValue >= 0.0);
559 ASSERT(r.fRealValue <= kMaxUInt32);
561 return (uint32) r.fRealValue;
567 return double(fx) * 0.0000152587890625;
572 fRealValue += a.fRealValue;
579 fRealValue -= a.fRealValue;
586 fRealValue *= a.fRealValue;
593 fRealValue /= a.fRealValue;
602 return a.fRealValue < (b.fRealValue - kPMRealEpsilon);
607 return a.fRealValue > (b.fRealValue + kPMRealEpsilon);
612 return a.fRealValue <= (b.fRealValue + kPMRealEpsilon);
617 return a.fRealValue >= (b.fRealValue - kPMRealEpsilon);
622 return ::fabs(a.fRealValue - b.fRealValue) < kPMRealEpsilon;
636 return ::fabs((a.fRealValue - 360.0) - b.fRealValue) < kPMRealEpsilon;
638 return ::fabs(a.fRealValue - (b.fRealValue - 360.0)) < kPMRealEpsilon;
643 return ::fabs(a.fRealValue - b.fRealValue) < epsilon;