diff --git a/include/boost/multiprecision/detail/default_ops.hpp b/include/boost/multiprecision/detail/default_ops.hpp index 415a1e66..ec2a31df 100644 --- a/include/boost/multiprecision/detail/default_ops.hpp +++ b/include/boost/multiprecision/detail/default_ops.hpp @@ -1212,6 +1212,15 @@ inline typename B::exponent_type eval_ilogb(const B& val) { BOOST_STATIC_ASSERT_MSG(!std::numeric_limits >::is_specialized || (std::numeric_limits >::radix == 2), "The default implementation of ilogb requires a base 2 number type"); typename B::exponent_type e; + switch(eval_fpclassify(val)) + { + case FP_NAN: + return (std::numeric_limits::min)(); + case FP_INFINITE: + return (std::numeric_limits::max)(); + case FP_ZERO: + return (std::numeric_limits::min)(); + } B result; eval_frexp(result, val, &e); return e - 1;