diff --git a/include/boost/multiprecision/mpfr.hpp b/include/boost/multiprecision/mpfr.hpp index e06316ab..c9a31b58 100644 --- a/include/boost/multiprecision/mpfr.hpp +++ b/include/boost/multiprecision/mpfr.hpp @@ -1518,10 +1518,37 @@ typedef number > mpfr_float; typedef number > static_mpfr_float_50; typedef number > static_mpfr_float_100; +template +inline int signbit BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number, ExpressionTemplates>& arg) +{ + return (arg.backend().data()[0]._mpfr_sign < 0) ? 1 : 0; +} + +template +inline boost::multiprecision::number, ExpressionTemplates> copysign BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number, ExpressionTemplates>& a, const boost::multiprecision::number, ExpressionTemplates>& b) +{ + return (boost::multiprecision::signbit)(a) != (boost::multiprecision::signbit)(b) ? boost::multiprecision::number, ExpressionTemplates>(-a) : a; +} + +template +inline int signbit BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number >, ExpressionTemplates>& arg) +{ + return (arg.backend().value().data()[0]._mpfr_sign < 0) ? 1 : 0; +} + +template +inline boost::multiprecision::number >, ExpressionTemplates> copysign BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number >, ExpressionTemplates>& a, const boost::multiprecision::number >, ExpressionTemplates>& b) +{ + return (boost::multiprecision::signbit)(a) != (boost::multiprecision::signbit)(b) ? boost::multiprecision::number >, ExpressionTemplates>(-a) : a; +} + } // namespace multiprecision namespace math{ + using boost::multiprecision::signbit; + using boost::multiprecision::copysign; + namespace tools{ template <> @@ -1857,39 +1884,8 @@ struct constant_catalan -inline int signbit BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number, ExpressionTemplates>& arg) -{ - return (arg.backend().data()[0]._mpfr_sign < 0) ? 1 : 0; -} - -template -inline boost::multiprecision::number, ExpressionTemplates> copysign BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number, ExpressionTemplates>& a, const boost::multiprecision::number, ExpressionTemplates>& b) -{ - return (boost::math::signbit)(a) != (boost::math::signbit)(b) ? boost::multiprecision::number, ExpressionTemplates>(-a) : a; -} - -template -inline int signbit BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number >, ExpressionTemplates>& arg) -{ - return (arg.backend().value().data()[0]._mpfr_sign < 0) ? 1 : 0; -} - -template -inline boost::multiprecision::number >, ExpressionTemplates> copysign BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number >, ExpressionTemplates>& a, const boost::multiprecision::number >, ExpressionTemplates>& b) -{ - return (boost::math::signbit)(a) != (boost::math::signbit)(b) ? boost::multiprecision::number >, ExpressionTemplates>(-a) : a; -} - } // namespace multiprecision -namespace math{ - - using boost::multiprecision::signbit; - using boost::multiprecision::copysign; - -} // namespace math - namespace multiprecision { // // Overloaded special functions which call native mpfr routines: