From d1982bfca9bf5fe44cb681fd9c86cc3290c82cfd Mon Sep 17 00:00:00 2001 From: ckormanyos Date: Fri, 29 Aug 2025 14:07:10 +0200 Subject: [PATCH] Handle review comments --- .../multiprecision/detail/default_ops.hpp | 34 ++----------------- .../multiprecision/detail/functions/pow.hpp | 8 ++--- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/include/boost/multiprecision/detail/default_ops.hpp b/include/boost/multiprecision/detail/default_ops.hpp index 6fd4b65e..87ada6e4 100644 --- a/include/boost/multiprecision/detail/default_ops.hpp +++ b/include/boost/multiprecision/detail/default_ops.hpp @@ -2619,13 +2619,6 @@ inline BOOST_MP_CXX14_CONSTEXPR typename multiprecision::detail::expression inline BOOST_MP_CXX14_CONSTEXPR multiprecision::number erf BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::number& arg) { - const int fpc_arg { (boost::multiprecision::fpclassify)(arg) }; - - if (fpc_arg == FP_ZERO) - { - return arg; - } - detail::scoped_default_precision > precision_guard(arg); return boost::math::erf(arg, c99_error_policy()); } @@ -2634,14 +2627,6 @@ inline BOOST_MP_CXX14_CONSTEXPR typename multiprecision::detail::expression::result_type; detail::scoped_default_precision precision_guard(arg); - - const int fpc_arg { (boost::multiprecision::fpclassify)(arg) }; - - if (fpc_arg == FP_ZERO) - { - return arg; - } - return erf(value_type(arg)); } template @@ -2693,27 +2678,12 @@ inline BOOST_MP_CXX14_CONSTEXPR typename multiprecision::detail::expression inline BOOST_MP_CXX14_CONSTEXPR multiprecision::number tgamma BOOST_PREVENT_MACRO_SUBSTITUTION(const multiprecision::number& arg) { - using local_number_type = multiprecision::number; - - detail::scoped_default_precision precision_guard(arg); - - const int fpc_arg { (boost::multiprecision::fpclassify)(arg) }; - - if ((fpc_arg == FP_ZERO) && std::numeric_limits::has_infinity) + detail::scoped_default_precision > precision_guard(arg); + if ((arg == 0) && std::numeric_limits >::has_infinity) { errno = ERANGE; return 1 / arg; } - else if ((fpc_arg == FP_NAN) && std::numeric_limits::has_quiet_NaN) - { - return arg; - } - else if ((fpc_arg == FP_INFINITE) && std::numeric_limits::has_infinity && std::numeric_limits::has_quiet_NaN) - { - const bool is_neg { arg.compare(local_number_type(0)) < 0 }; - - return ((!is_neg) ? std::numeric_limits::infinity() : std::numeric_limits::quiet_NaN()); - } return boost::math::tgamma(arg, c99_error_policy()); } template diff --git a/include/boost/multiprecision/detail/functions/pow.hpp b/include/boost/multiprecision/detail/functions/pow.hpp index e79aacff..9cf265fb 100644 --- a/include/boost/multiprecision/detail/functions/pow.hpp +++ b/include/boost/multiprecision/detail/functions/pow.hpp @@ -509,15 +509,15 @@ inline void eval_pow(T& result, const T& x, const T& a) return; } - const int fpc_x { eval_fpclassify(x) }; - const int fpc_a { eval_fpclassify(a) }; - - if (fpc_a == FP_ZERO) + if (eval_is_zero(a)) { result = si_type(1); return; } + const int fpc_x { eval_fpclassify(x) }; + const int fpc_a { eval_fpclassify(a) }; + switch (fpc_x) { case FP_ZERO: