From 37e81ec146bdd31455d0768eadc7584eb33c062a Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Tue, 31 May 2016 09:55:57 +0100 Subject: [PATCH] Default ilogb implementation should handle special values. More work is needed here... --- include/boost/multiprecision/detail/default_ops.hpp | 9 +++++++++ 1 file changed, 9 insertions(+) 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;