diff --git a/include/rapidjson/internal/diyfp.h b/include/rapidjson/internal/diyfp.h index 85243af..7684bd8 100644 --- a/include/rapidjson/internal/diyfp.h +++ b/include/rapidjson/internal/diyfp.h @@ -20,6 +20,7 @@ #define RAPIDJSON_DIYFP_H_ #include "../rapidjson.h" +#include #if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__INTEL_COMPILER) #include @@ -146,7 +147,10 @@ struct DiyFp { // Underflow. return 0.0; } - RAPIDJSON_ASSERT(e < kDpMaxExponent); + if (e >= kDpMaxExponent) { + // Overflow. + return std::numeric_limits::infinity(); + } const uint64_t be = (e == kDpDenormalExponent && (f & kDpHiddenBit) == 0) ? 0 : static_cast(e + kDpExponentBias); u.u64 = (f & kDpSignificandMask) | (be << kDpSignificandSize);