diff --git a/config/Jamfile.v2 b/config/Jamfile.v2 index 8773e6e1d..70162ff74 100644 --- a/config/Jamfile.v2 +++ b/config/Jamfile.v2 @@ -10,6 +10,8 @@ local ntl-path = [ modules.peek : NTL_PATH ] ; local gmp_path = [ modules.peek : GMP_PATH ] ; local e_float_path = [ modules.peek : E_FLOAT_PATH ] ; +lib quadmath ; + obj has_long_double_support : has_long_double_support.cpp ; obj has_mpfr_class : has_mpfr_class.cpp : $(gmp_path) $(gmp_path)/mpfr $(gmp_path)/gmpfrxx ; @@ -21,6 +23,8 @@ obj has_gmpxx : has_gmpxx.cpp : obj has_gcc_visibility : has_gcc_visibility.cpp : gcc:-fvisibility=hidden gcc:-Werror ; obj has_e_float : has_e_float.cpp : $(e_float_path) ; +exe has_float128 : has_float128.cpp quadmath ; +exe has_intel_quad : has_intel_quad.cpp : -Qoption,cpp,--extended_float_type ; explicit has_long_double_support ; explicit has_mpfr_class ; @@ -29,3 +33,5 @@ explicit has_ntl_rr ; explicit has_gmpxx ; explicit has_gcc_visibility ; explicit has_e_float ; +explicit has_float128 ; +explicit has_intel_quad ; diff --git a/config/has_float128.cpp b/config/has_float128.cpp new file mode 100644 index 000000000..60a2e2e48 --- /dev/null +++ b/config/has_float128.cpp @@ -0,0 +1,17 @@ +// Copyright John Maddock 2013. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +extern "C" { +#include +} + +int main() +{ + __float128 f = -2.0Q; + f = fabsq(f); + + return 0; +} + diff --git a/config/has_intel_quad.cpp b/config/has_intel_quad.cpp new file mode 100644 index 000000000..a2db80cc5 --- /dev/null +++ b/config/has_intel_quad.cpp @@ -0,0 +1,16 @@ +// Copyright John Maddock 2013. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +extern "C" _Quad __fabs(_Quad); + +int main() +{ + _Quad f = -2.0Q; + f = __fabsq(f); + + return 0; +} + + diff --git a/include/boost/math/bindings/detail/big_lanczos.hpp b/include/boost/math/bindings/detail/big_lanczos.hpp index 797b8979a..573f9ec1a 100644 --- a/include/boost/math/bindings/detail/big_lanczos.hpp +++ b/include/boost/math/bindings/detail/big_lanczos.hpp @@ -57,7 +57,7 @@ struct lanczos22UDT : public mpl::int_<120> static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 2.50662827463100050241576528481104525333)) }; static const T denom[22] = { - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 0.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 2432902008176640000.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 8752948036761600000.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 13803759753640704000.0)), @@ -74,11 +74,11 @@ struct lanczos22UDT : public mpl::int_<120> static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 756111184500.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 40171771630.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1672280820.0)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 53327946)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1256850)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 20615)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 210)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1)) + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 53327946.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1256850.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 20615.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 210.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1.0)) }; return boost::math::tools::evaluate_rational(num, denom, z); } @@ -112,7 +112,7 @@ struct lanczos22UDT : public mpl::int_<120> static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 0.3765495513732730583386223384116545391759e-9)) }; static const T denom[22] = { - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 0.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 2432902008176640000.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 8752948036761600000.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 13803759753640704000.0)), @@ -131,9 +131,9 @@ struct lanczos22UDT : public mpl::int_<120> static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1672280820.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 53327946.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1256850.0)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 20615)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 210)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1)) + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 20615.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 210.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 120, 1.0)) }; return boost::math::tools::evaluate_rational(num, denom, z); } diff --git a/include/boost/math/bindings/mpfr.hpp b/include/boost/math/bindings/mpfr.hpp index a64a98ac7..6aa77913a 100644 --- a/include/boost/math/bindings/mpfr.hpp +++ b/include/boost/math/bindings/mpfr.hpp @@ -36,6 +36,7 @@ #include #include #include +#include inline mpfr_class fabs(const mpfr_class& v) { @@ -180,7 +181,14 @@ inline long long lltrunc(__gmp_expr const& x, const Policy& pol) return lltrunc(static_cast(x), pol); } -namespace boost{ namespace math{ +namespace boost{ + +#ifdef BOOST_MATH_USE_FLOAT128 + template<> struct is_convertible : public boost::integral_constant{}; +#endif + template<> struct is_convertible : public boost::integral_constant{}; + +namespace math{ #if defined(__GNUC__) && (__GNUC__ < 4) using ::iround; diff --git a/include/boost/math/concepts/real_concept.hpp b/include/boost/math/concepts/real_concept.hpp index 08a30076b..b7912dffc 100644 --- a/include/boost/math/concepts/real_concept.hpp +++ b/include/boost/math/concepts/real_concept.hpp @@ -328,7 +328,7 @@ namespace tools { template <> -inline concepts::real_concept make_big_value(long double val, const char* , mpl::false_ const&, mpl::false_ const&) +inline concepts::real_concept make_big_value(boost::floatmax_t val, const char* , mpl::false_ const&, mpl::false_ const&) { return val; // Can't use lexical_cast here, sometimes it fails.... } diff --git a/include/boost/math/concepts/std_real_concept.hpp b/include/boost/math/concepts/std_real_concept.hpp index 3c926f413..8051b48c7 100644 --- a/include/boost/math/concepts/std_real_concept.hpp +++ b/include/boost/math/concepts/std_real_concept.hpp @@ -333,7 +333,7 @@ namespace tools { template <> -inline concepts::std_real_concept make_big_value(long double val, const char* , mpl::false_ const&, mpl::false_ const&) +inline concepts::std_real_concept make_big_value(boost::floatmax_t val, const char*, mpl::false_ const&, mpl::false_ const&) { return val; // Can't use lexical_cast here, sometimes it fails.... } diff --git a/include/boost/math/policies/error_handling.hpp b/include/boost/math/policies/error_handling.hpp index 3e8efb982..be7521292 100644 --- a/include/boost/math/policies/error_handling.hpp +++ b/include/boost/math/policies/error_handling.hpp @@ -78,6 +78,27 @@ inline std::string do_format(Formatter f, const Group& g) return (f % g).str(); } +template +inline const char* name_of() +{ +#ifndef BOOST_NO_RTTI + return typeid(T).name(); +#else + return "unknown"; +#endif +} +template <> inline const char* name_of(){ return "float"; } +template <> inline const char* name_of(){ return "double"; } +template <> inline const char* name_of(){ return "long double"; } + +#ifdef BOOST_MATH_USE_FLOAT128 +template <> +inline const char* name_of() +{ + return "__float128"; +} +#endif + template void raise_error(const char* function, const char* message) { @@ -88,7 +109,7 @@ void raise_error(const char* function, const char* message) std::string msg("Error in function "); #ifndef BOOST_NO_RTTI - msg += (boost::format(function) % typeid(T).name()).str(); + msg += (boost::format(function) % boost::math::policies::detail::name_of()).str(); #else msg += function; #endif @@ -109,7 +130,7 @@ void raise_error(const char* function, const char* message, const T& val) std::string msg("Error in function "); #ifndef BOOST_NO_RTTI - msg += (boost::format(function) % typeid(T).name()).str(); + msg += (boost::format(function) % boost::math::policies::detail::name_of()).str(); #else msg += function; #endif @@ -300,7 +321,7 @@ inline T raise_overflow_error( { std::string fmsg("Error in function "); #ifndef BOOST_NO_RTTI - fmsg += (boost::format(function) % typeid(T).name()).str(); + fmsg += (boost::format(function) % boost::math::policies::detail::name_of()).str(); #else fmsg += function; #endif diff --git a/include/boost/math/special_functions/bessel_prime.hpp b/include/boost/math/special_functions/bessel_prime.hpp index f755df119..5b20494b4 100644 --- a/include/boost/math/special_functions/bessel_prime.hpp +++ b/include/boost/math/special_functions/bessel_prime.hpp @@ -64,7 +64,7 @@ inline T cyl_bessel_j_prime_imp(T v, T x, const Policy& pol) inversed = true; } T r = boost::math::detail::bessel_j_derivative_small_z_series(v, x, pol); - return inversed ? -r : r; + return inversed ? T(-r) : r; } // // Special case for v == 0: @@ -93,7 +93,7 @@ inline T sph_bessel_j_prime_imp(unsigned v, T x, const Policy& pol) // if (v == 0) return (x == 0) ? boost::math::policies::raise_overflow_error(function, 0, pol) - : -boost::math::detail::sph_bessel_j_imp(1, x, pol); + : static_cast(-boost::math::detail::sph_bessel_j_imp(1, x, pol)); // // Special case for x == 0 and v > 0: // diff --git a/include/boost/math/special_functions/detail/bernoulli_details.hpp b/include/boost/math/special_functions/detail/bernoulli_details.hpp index e3a69d27d..4114a0bd7 100644 --- a/include/boost/math/special_functions/detail/bernoulli_details.hpp +++ b/include/boost/math/special_functions/detail/bernoulli_details.hpp @@ -87,7 +87,7 @@ T b2n_asymptotic(int n) + ((nx * (T(2) - (nx2 * 7) * (1 + ((nx2 * 30) * ((nx2 * 12) - 1))))) / (((nx2 * nx2) * nx2) * 2520)); return ((n / 2) & 1 ? 1 : -1) * (approximate_log_of_bernoulli_bn > tools::log_max_value() ? policies::raise_overflow_error("boost::math::bernoulli_b2n<%1%>(std::size_t)", 0, nx, Policy()) - : exp(approximate_log_of_bernoulli_bn)); + : static_cast(exp(approximate_log_of_bernoulli_bn))); } template @@ -369,7 +369,7 @@ public: while(i < m) { b = std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : tools::max_value(); - bn[static_cast(i)] = ((i % 2U) ? b : -b); + bn[static_cast(i)] = ((i % 2U) ? b : T(-b)); ++i; } break; @@ -383,7 +383,7 @@ public: const bool b_neg = i % 2 == 0; - bn[static_cast(i)] = ((!b_neg) ? b : -b); + bn[static_cast(i)] = ((!b_neg) ? b : T(-b)); } } diff --git a/include/boost/math/special_functions/detail/bessel_kn.hpp b/include/boost/math/special_functions/detail/bessel_kn.hpp index 5f0146099..e3a5023c6 100644 --- a/include/boost/math/special_functions/detail/bessel_kn.hpp +++ b/include/boost/math/special_functions/detail/bessel_kn.hpp @@ -22,6 +22,7 @@ namespace boost { namespace math { namespace detail{ template T bessel_kn(int n, T x, const Policy& pol) { + BOOST_MATH_STD_USING T value, current, prev; using namespace boost::math::tools; diff --git a/include/boost/math/special_functions/detail/erf_inv.hpp b/include/boost/math/special_functions/detail/erf_inv.hpp index ab926ad8c..d50de9df2 100644 --- a/include/boost/math/special_functions/detail/erf_inv.hpp +++ b/include/boost/math/special_functions/detail/erf_inv.hpp @@ -92,7 +92,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>* BOOST_MATH_BIG_CONSTANT(T, 64, -3.67192254707729348546) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 6.24264124854247537712), BOOST_MATH_BIG_CONSTANT(T, 64, 3.9713437953343869095), BOOST_MATH_BIG_CONSTANT(T, 64, -28.6608180499800029974), @@ -176,7 +176,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>* BOOST_MATH_BIG_CONSTANT(T, 64, 0.266339227425782031962e-11) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 1.3653349817554063097), BOOST_MATH_BIG_CONSTANT(T, 64, 0.762059164553623404043), BOOST_MATH_BIG_CONSTANT(T, 64, 0.220091105764131249824), @@ -204,7 +204,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>* BOOST_MATH_BIG_CONSTANT(T, 64, 0.99055709973310326855e-16) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 0.591429344886417493481), BOOST_MATH_BIG_CONSTANT(T, 64, 0.138151865749083321638), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0160746087093676504695), @@ -231,7 +231,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>* BOOST_MATH_BIG_CONSTANT(T, 64, -0.116765012397184275695e-17) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 0.207123112214422517181), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0169410838120975906478), BOOST_MATH_BIG_CONSTANT(T, 64, 0.000690538265622684595676), @@ -258,7 +258,7 @@ T erf_inv_imp(const T& p, const T& q, const Policy&, const boost::mpl::int_<64>* BOOST_MATH_BIG_CONSTANT(T, 64, -0.348890393399948882918e-21) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0845746234001899436914), BOOST_MATH_BIG_CONSTANT(T, 64, 0.00282092984726264681981), BOOST_MATH_BIG_CONSTANT(T, 64, 0.468292921940894236786e-4), diff --git a/include/boost/math/special_functions/detail/lgamma_small.hpp b/include/boost/math/special_functions/detail/lgamma_small.hpp index 82b5d159e..e65f8b7e9 100644 --- a/include/boost/math/special_functions/detail/lgamma_small.hpp +++ b/include/boost/math/special_functions/detail/lgamma_small.hpp @@ -278,7 +278,7 @@ T lgamma_small_imp(T z, T zm1, T zm2, const mpl::int_<113>&, const Policy& /* l BOOST_MATH_BIG_CONSTANT(T, 113, -0.70529798686542184668416911331718963364e-8) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.5877485070422317542808137697939233685), BOOST_MATH_BIG_CONSTANT(T, 113, 2.8797959228352591788629602533153837126), BOOST_MATH_BIG_CONSTANT(T, 113, 1.8030885955284082026405495275461180977), diff --git a/include/boost/math/special_functions/detail/unchecked_factorial.hpp b/include/boost/math/special_functions/detail/unchecked_factorial.hpp index 4fa1ebff9..3c23d6e15 100644 --- a/include/boost/math/special_functions/detail/unchecked_factorial.hpp +++ b/include/boost/math/special_functions/detail/unchecked_factorial.hpp @@ -268,6 +268,196 @@ struct max_factorial BOOST_STATIC_CONSTANT(unsigned, value = 170); }; +#ifdef BOOST_MATH_USE_FLOAT128 + +template <> +inline BOOST_MATH_FLOAT128_TYPE unchecked_factorial(unsigned i) +{ + static const boost::array factorials = { { + 1, + 1, + 2, + 6, + 24, + 120, + 720, + 5040, + 40320, + 362880.0Q, + 3628800.0Q, + 39916800.0Q, + 479001600.0Q, + 6227020800.0Q, + 87178291200.0Q, + 1307674368000.0Q, + 20922789888000.0Q, + 355687428096000.0Q, + 6402373705728000.0Q, + 121645100408832000.0Q, + 0.243290200817664e19Q, + 0.5109094217170944e20Q, + 0.112400072777760768e22Q, + 0.2585201673888497664e23Q, + 0.62044840173323943936e24Q, + 0.15511210043330985984e26Q, + 0.403291461126605635584e27Q, + 0.10888869450418352160768e29Q, + 0.304888344611713860501504e30Q, + 0.8841761993739701954543616e31Q, + 0.26525285981219105863630848e33Q, + 0.822283865417792281772556288e34Q, + 0.26313083693369353016721801216e36Q, + 0.868331761881188649551819440128e37Q, + 0.29523279903960414084761860964352e39Q, + 0.103331479663861449296666513375232e41Q, + 0.3719933267899012174679994481508352e42Q, + 0.137637530912263450463159795815809024e44Q, + 0.5230226174666011117600072241000742912e45Q, + 0.203978820811974433586402817399028973568e47Q, + 0.815915283247897734345611269596115894272e48Q, + 0.3345252661316380710817006205344075166515e50Q, + 0.1405006117752879898543142606244511569936e52Q, + 0.6041526306337383563735513206851399750726e53Q, + 0.265827157478844876804362581101461589032e55Q, + 0.1196222208654801945619631614956577150644e57Q, + 0.5502622159812088949850305428800254892962e58Q, + 0.2586232415111681806429643551536119799692e60Q, + 0.1241391559253607267086228904737337503852e62Q, + 0.6082818640342675608722521633212953768876e63Q, + 0.3041409320171337804361260816606476884438e65Q, + 0.1551118753287382280224243016469303211063e67Q, + 0.8065817517094387857166063685640376697529e68Q, + 0.427488328406002556429801375338939964969e70Q, + 0.2308436973392413804720927426830275810833e72Q, + 0.1269640335365827592596510084756651695958e74Q, + 0.7109985878048634518540456474637249497365e75Q, + 0.4052691950487721675568060190543232213498e77Q, + 0.2350561331282878571829474910515074683829e79Q, + 0.1386831185456898357379390197203894063459e81Q, + 0.8320987112741390144276341183223364380754e82Q, + 0.507580213877224798800856812176625227226e84Q, + 0.3146997326038793752565312235495076408801e86Q, + 0.1982608315404440064116146708361898137545e88Q, + 0.1268869321858841641034333893351614808029e90Q, + 0.8247650592082470666723170306785496252186e91Q, + 0.5443449390774430640037292402478427526443e93Q, + 0.3647111091818868528824985909660546442717e95Q, + 0.2480035542436830599600990418569171581047e97Q, + 0.1711224524281413113724683388812728390923e99Q, + 0.1197857166996989179607278372168909873646e101Q, + 0.8504785885678623175211676442399260102886e102Q, + 0.6123445837688608686152407038527467274078e104Q, + 0.4470115461512684340891257138125051110077e106Q, + 0.3307885441519386412259530282212537821457e108Q, + 0.2480914081139539809194647711659403366093e110Q, + 0.188549470166605025498793226086114655823e112Q, + 0.1451830920282858696340707840863082849837e114Q, + 0.1132428117820629783145752115873204622873e116Q, + 0.8946182130782975286851441715398316520698e117Q, + 0.7156945704626380229481153372318653216558e119Q, + 0.5797126020747367985879734231578109105412e121Q, + 0.4753643337012841748421382069894049466438e123Q, + 0.3945523969720658651189747118012061057144e125Q, + 0.3314240134565353266999387579130131288001e127Q, + 0.2817104114380550276949479442260611594801e129Q, + 0.2422709538367273238176552320344125971528e131Q, + 0.210775729837952771721360051869938959523e133Q, + 0.1854826422573984391147968456455462843802e135Q, + 0.1650795516090846108121691926245361930984e137Q, + 0.1485715964481761497309522733620825737886e139Q, + 0.1352001527678402962551665687594951421476e141Q, + 0.1243841405464130725547532432587355307758e143Q, + 0.1156772507081641574759205162306240436215e145Q, + 0.1087366156656743080273652852567866010042e147Q, + 0.103299784882390592625997020993947270954e149Q, + 0.9916779348709496892095714015418938011582e150Q, + 0.9619275968248211985332842594956369871234e152Q, + 0.942689044888324774562618574305724247381e154Q, + 0.9332621544394415268169923885626670049072e156Q, + 0.9332621544394415268169923885626670049072e158Q, + 0.9425947759838359420851623124482936749562e160Q, + 0.9614466715035126609268655586972595484554e162Q, + 0.990290071648618040754671525458177334909e164Q, + 0.1029901674514562762384858386476504428305e167Q, + 0.1081396758240290900504101305800329649721e169Q, + 0.1146280563734708354534347384148349428704e171Q, + 0.1226520203196137939351751701038733888713e173Q, + 0.132464181945182897449989183712183259981e175Q, + 0.1443859583202493582204882102462797533793e177Q, + 0.1588245541522742940425370312709077287172e179Q, + 0.1762952551090244663872161047107075788761e181Q, + 0.1974506857221074023536820372759924883413e183Q, + 0.2231192748659813646596607021218715118256e185Q, + 0.2543559733472187557120132004189335234812e187Q, + 0.2925093693493015690688151804817735520034e189Q, + 0.339310868445189820119825609358857320324e191Q, + 0.396993716080872089540195962949863064779e193Q, + 0.4684525849754290656574312362808384164393e195Q, + 0.5574585761207605881323431711741977155627e197Q, + 0.6689502913449127057588118054090372586753e199Q, + 0.8094298525273443739681622845449350829971e201Q, + 0.9875044200833601362411579871448208012564e203Q, + 0.1214630436702532967576624324188129585545e206Q, + 0.1506141741511140879795014161993280686076e208Q, + 0.1882677176888926099743767702491600857595e210Q, + 0.237217324288004688567714730513941708057e212Q, + 0.3012660018457659544809977077527059692324e214Q, + 0.3856204823625804217356770659234636406175e216Q, + 0.4974504222477287440390234150412680963966e218Q, + 0.6466855489220473672507304395536485253155e220Q, + 0.8471580690878820510984568758152795681634e222Q, + 0.1118248651196004307449963076076169029976e225Q, + 0.1487270706090685728908450891181304809868e227Q, + 0.1992942746161518876737324194182948445223e229Q, + 0.269047270731805048359538766214698040105e231Q, + 0.3659042881952548657689727220519893345429e233Q, + 0.5012888748274991661034926292112253883237e235Q, + 0.6917786472619488492228198283114910358867e237Q, + 0.9615723196941089004197195613529725398826e239Q, + 0.1346201247571752460587607385894161555836e242Q, + 0.1898143759076170969428526414110767793728e244Q, + 0.2695364137888162776588507508037290267094e246Q, + 0.3854370717180072770521565736493325081944e248Q, + 0.5550293832739304789551054660550388118e250Q, + 0.80479260574719919448490292577980627711e252Q, + 0.1174997204390910823947958271638517164581e255Q, + 0.1727245890454638911203498659308620231933e257Q, + 0.2556323917872865588581178015776757943262e259Q, + 0.380892263763056972698595524350736933546e261Q, + 0.571338395644585459047893286526105400319e263Q, + 0.8627209774233240431623188626544191544816e265Q, + 0.1311335885683452545606724671234717114812e268Q, + 0.2006343905095682394778288746989117185662e270Q, + 0.308976961384735088795856467036324046592e272Q, + 0.4789142901463393876335775239063022722176e274Q, + 0.7471062926282894447083809372938315446595e276Q, + 0.1172956879426414428192158071551315525115e279Q, + 0.1853271869493734796543609753051078529682e281Q, + 0.2946702272495038326504339507351214862195e283Q, + 0.4714723635992061322406943211761943779512e285Q, + 0.7590705053947218729075178570936729485014e287Q, + 0.1229694218739449434110178928491750176572e290Q, + 0.2004401576545302577599591653441552787813e292Q, + 0.3287218585534296227263330311644146572013e294Q, + 0.5423910666131588774984495014212841843822e296Q, + 0.9003691705778437366474261723593317460744e298Q, + 0.1503616514864999040201201707840084015944e301Q, + 0.2526075744973198387538018869171341146786e303Q, + 0.4269068009004705274939251888899566538069e305Q, + 0.7257415615307998967396728211129263114717e307Q, + } }; + + return factorials[i]; +} + +template <> +struct max_factorial +{ + BOOST_STATIC_CONSTANT(unsigned, value = 170); +}; + +#endif + template <> inline double unchecked_factorial(unsigned i BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(double)) { diff --git a/include/boost/math/special_functions/digamma.hpp b/include/boost/math/special_functions/digamma.hpp index dc455cdb0..79bc43165 100644 --- a/include/boost/math/special_functions/digamma.hpp +++ b/include/boost/math/special_functions/digamma.hpp @@ -286,7 +286,7 @@ T digamma_imp_1_2(T x, const mpl::int_<53>*) BOOST_MATH_BIG_CONSTANT(T, 53, -0.0020713321167745952) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 2.0767117023730469), BOOST_MATH_BIG_CONSTANT(T, 53, 1.4606242909763515), BOOST_MATH_BIG_CONSTANT(T, 53, 0.43593529692665969), diff --git a/include/boost/math/special_functions/erf.hpp b/include/boost/math/special_functions/erf.hpp index 04954078a..f7f75b0bc 100644 --- a/include/boost/math/special_functions/erf.hpp +++ b/include/boost/math/special_functions/erf.hpp @@ -291,7 +291,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<53>& t) BOOST_MATH_BIG_CONSTANT(T, 53, 0.000235839115596880717416), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 1.53991494948552447182), BOOST_MATH_BIG_CONSTANT(T, 53, 0.982403709157920235114), BOOST_MATH_BIG_CONSTANT(T, 53, 0.325732924782444448493), @@ -317,7 +317,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<53>& t) BOOST_MATH_BIG_CONSTANT(T, 53, 0.113212406648847561139e-4), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 1.04217814166938418171), BOOST_MATH_BIG_CONSTANT(T, 53, 0.442597659481563127003), BOOST_MATH_BIG_CONSTANT(T, 53, 0.0958492726301061423444), @@ -344,7 +344,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<53>& t) BOOST_MATH_BIG_CONSTANT(T, 53, -2.8175401114513378771), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 2.79257750980575282228), BOOST_MATH_BIG_CONSTANT(T, 53, 11.0567237927800161565), BOOST_MATH_BIG_CONSTANT(T, 53, 15.930646027911794143), @@ -428,7 +428,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t) BOOST_MATH_BIG_CONSTANT(T, 64, -0.200305626366151877759e-4), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 0.455817300515875172439), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0916537354356241792007), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0102722652675910031202), @@ -462,7 +462,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t) BOOST_MATH_BIG_CONSTANT(T, 64, 0.266689068336295642561e-7), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 2.03237474985469469291), BOOST_MATH_BIG_CONSTANT(T, 64, 1.78355454954969405222), BOOST_MATH_BIG_CONSTANT(T, 64, 0.867940326293760578231), @@ -490,7 +490,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t) BOOST_MATH_BIG_CONSTANT(T, 64, 0.515917266698050027934e-4), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 1.71657861671930336344), BOOST_MATH_BIG_CONSTANT(T, 64, 1.26409634824280366218), BOOST_MATH_BIG_CONSTANT(T, 64, 0.512371437838969015941), @@ -518,7 +518,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t) BOOST_MATH_BIG_CONSTANT(T, 64, 0.189896043050331257262e-5), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 1.19352160185285642574), BOOST_MATH_BIG_CONSTANT(T, 64, 0.603256964363454392857), BOOST_MATH_BIG_CONSTANT(T, 64, 0.165411142458540585835), @@ -548,7 +548,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<64>& t) BOOST_MATH_BIG_CONSTANT(T, 64, -16.8865774499799676937), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 4.72948911186645394541), BOOST_MATH_BIG_CONSTANT(T, 64, 23.6750543147695749212), BOOST_MATH_BIG_CONSTANT(T, 64, 60.0021517335693186785), @@ -636,7 +636,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, -0.344448249920445916714548295433198544e-7), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.466542092785657604666906909196052522), BOOST_MATH_BIG_CONSTANT(T, 113, 0.100005087012526447295176964142107611), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0128341535890117646540050072234142603), @@ -674,7 +674,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.436544865032836914773944382339900079e-5), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.47651182872457465043733800302427977), BOOST_MATH_BIG_CONSTANT(T, 113, 2.78706486002517996428836400245547955), BOOST_MATH_BIG_CONSTANT(T, 113, 1.87295924621659627926365005293130693), @@ -709,7 +709,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.133166058052466262415271732172490045e-5), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.32970330146503867261275580968135126), BOOST_MATH_BIG_CONSTANT(T, 113, 2.46325715420422771961250513514928746), BOOST_MATH_BIG_CONSTANT(T, 113, 1.55307882560757679068505047390857842), @@ -743,7 +743,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.312857043762117596999398067153076051e-6), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.13506082409097783827103424943508554), BOOST_MATH_BIG_CONSTANT(T, 113, 2.06399257267556230937723190496806215), BOOST_MATH_BIG_CONSTANT(T, 113, 1.18678481279932541314830499880691109), @@ -778,7 +778,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.676586625472423508158937481943649258e-7), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.93669171363907292305550231764920001), BOOST_MATH_BIG_CONSTANT(T, 113, 1.69468476144051356810672506101377494), BOOST_MATH_BIG_CONSTANT(T, 113, 0.880023580986436640372794392579985511), @@ -811,7 +811,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.971120407556888763695313774578711839e-7), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.59911256167540354915906501335919317), BOOST_MATH_BIG_CONSTANT(T, 113, 1.136006830764025173864831382946934), BOOST_MATH_BIG_CONSTANT(T, 113, 0.468565867990030871678574840738423023), @@ -845,7 +845,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.156161469668275442569286723236274457e-9), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.52955245103668419479878456656709381), BOOST_MATH_BIG_CONSTANT(T, 113, 1.06263944820093830054635017117417064), BOOST_MATH_BIG_CONSTANT(T, 113, 0.441684612681607364321013134378316463), @@ -880,7 +880,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.673002744115866600294723141176820155e-10), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.12843690320861239631195353379313367), BOOST_MATH_BIG_CONSTANT(T, 113, 0.569900657061622955362493442186537259), BOOST_MATH_BIG_CONSTANT(T, 113, 0.169094404206844928112348730277514273), @@ -914,7 +914,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, 0.119735694018906705225870691331543806e-8), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.69889613396167354566098060039549882), BOOST_MATH_BIG_CONSTANT(T, 113, 1.28824647372749624464956031163282674), BOOST_MATH_BIG_CONSTANT(T, 113, 0.572297795434934493541628008224078717), @@ -950,7 +950,7 @@ T erf_imp(T z, bool invert, const Policy& pol, const mpl::int_<113>& t) BOOST_MATH_BIG_CONSTANT(T, 113, -60.0530577077238079968843307523245547), }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 3.49040448075464744191022350947892036), BOOST_MATH_BIG_CONSTANT(T, 113, 34.3563592467165971295915749548313227), BOOST_MATH_BIG_CONSTANT(T, 113, 84.4993232033879023178285731843850461), diff --git a/include/boost/math/special_functions/expint.hpp b/include/boost/math/special_functions/expint.hpp index 1c86d282f..49308441b 100644 --- a/include/boost/math/special_functions/expint.hpp +++ b/include/boost/math/special_functions/expint.hpp @@ -55,7 +55,7 @@ T expint_1_rational(const T& z, const mpl::int_<53>&) BOOST_MATH_BIG_CONSTANT(T, 53, -0.000111507792921197858394) }; static const T Q[6] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 0.37091387659397013215), BOOST_MATH_BIG_CONSTANT(T, 53, 0.056770677104207528384), BOOST_MATH_BIG_CONSTANT(T, 53, 0.00427347600017103698101), @@ -84,7 +84,7 @@ T expint_1_rational(const T& z, const mpl::int_<53>&) BOOST_MATH_BIG_CONSTANT(T, 53, -1185.45720315201027667) }; static const T Q[12] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 45.3058660811801465927), BOOST_MATH_BIG_CONSTANT(T, 53, 809.193214954550328455), BOOST_MATH_BIG_CONSTANT(T, 53, 7417.37624454689546708), @@ -130,7 +130,7 @@ T expint_1_rational(const T& z, const mpl::int_<64>&) BOOST_MATH_BIG_CONSTANT(T, 64, 0.30853660894346057053e-4) }; static const T Q[7] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 0.317978365797784100273), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0393622602554758722511), BOOST_MATH_BIG_CONSTANT(T, 64, 0.00204062029115966323229), @@ -163,7 +163,7 @@ T expint_1_rational(const T& z, const mpl::int_<64>&) BOOST_MATH_BIG_CONSTANT(T, 64, -2038.82870680427258038) }; static const T Q[14] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 64.1517806091379399478), BOOST_MATH_BIG_CONSTANT(T, 64, 1690.76044393722763785), BOOST_MATH_BIG_CONSTANT(T, 64, 24035.9534033068949426), @@ -215,7 +215,7 @@ T expint_1_rational(const T& z, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.340500302777838063940402160594523429e-9) }; static const T Q[10] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.426568827778942588160423015589537302), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0841384046470893490592450881447510148), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0100557215850668029618957359471132995), @@ -256,7 +256,7 @@ T expint_1_rational(const T& z, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -1.51492042209561411434644938098833499) }; static const T Q[16] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 46.734521442032505570517810766704587), BOOST_MATH_BIG_CONSTANT(T, 113, 908.694714348462269000247450058595655), BOOST_MATH_BIG_CONSTANT(T, 113, 9701.76053033673927362784882748513195), @@ -305,7 +305,7 @@ T expint_1_rational(const T& z, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -68028222642.1941480871395695677675137) }; static const T Q[20] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 168.542326331163836642960118190147311), BOOST_MATH_BIG_CONSTANT(T, 113, 12535.7237814586576783518249115343619), BOOST_MATH_BIG_CONSTANT(T, 113, 544891.263372016404143120911148640627), @@ -541,7 +541,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag) BOOST_MATH_BIG_CONSTANT(T, 53, 0.2777056254402008721e-6) }; static const T Q[8] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, -1.17090412365413911947), BOOST_MATH_BIG_CONSTANT(T, 53, 0.62215109846016746276), BOOST_MATH_BIG_CONSTANT(T, 53, -0.195114782069495403315), @@ -587,7 +587,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag) BOOST_MATH_BIG_CONSTANT(T, 53, -0.396487648924804510056e-5) }; static const T Q[8] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 0.744625566823272107711), BOOST_MATH_BIG_CONSTANT(T, 53, 0.329061095011767059236), BOOST_MATH_BIG_CONSTANT(T, 53, 0.100128624977313872323), @@ -621,7 +621,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag) BOOST_MATH_BIG_CONSTANT(T, 53, -0.138652200349182596186e-4) }; static const T Q[9] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 1.97017214039061194971), BOOST_MATH_BIG_CONSTANT(T, 53, 1.86232465043073157508), BOOST_MATH_BIG_CONSTANT(T, 53, 1.09601437090337519977), @@ -657,7 +657,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag) BOOST_MATH_BIG_CONSTANT(T, 53, -0.113161784705911400295e-9) }; static const T Q[9] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 2.84354408840148561131), BOOST_MATH_BIG_CONSTANT(T, 53, 3.6599610090072393012), BOOST_MATH_BIG_CONSTANT(T, 53, 2.75088464344293083595), @@ -686,7 +686,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<53>& tag) BOOST_MATH_BIG_CONSTANT(T, 53, -38703.1431362056714134) }; static const T Q[7] = { - BOOST_MATH_BIG_CONSTANT(T, 53, 1), + BOOST_MATH_BIG_CONSTANT(T, 53, 1.0), BOOST_MATH_BIG_CONSTANT(T, 53, 61.9733592849439884145), BOOST_MATH_BIG_CONSTANT(T, 53, -2354.56211323420194283), BOOST_MATH_BIG_CONSTANT(T, 53, 22329.1459489893079041), @@ -757,7 +757,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag) BOOST_MATH_BIG_CONSTANT(T, 64, 0.177833045143692498221e-7) }; static const T Q[9] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, -1.20352377969742325748), BOOST_MATH_BIG_CONSTANT(T, 64, 0.66707904942606479811), BOOST_MATH_BIG_CONSTANT(T, 64, -0.223014531629140771914), @@ -806,7 +806,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag) BOOST_MATH_BIG_CONSTANT(T, 64, -0.377246883283337141444e-6) }; static const T Q[10] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 1.08073635708902053767), BOOST_MATH_BIG_CONSTANT(T, 64, 0.553681133533942532909), BOOST_MATH_BIG_CONSTANT(T, 64, 0.176763647137553797451), @@ -844,7 +844,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag) BOOST_MATH_BIG_CONSTANT(T, 64, -0.252788029251437017959e-5) }; static const T Q[10] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 2.00323265503572414261), BOOST_MATH_BIG_CONSTANT(T, 64, 1.94688958187256383178), BOOST_MATH_BIG_CONSTANT(T, 64, 1.19733638134417472296), @@ -883,7 +883,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag) BOOST_MATH_BIG_CONSTANT(T, 64, -0.533769629702262072175e-11) }; static const T Q[9] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 3.13286733695729715455), BOOST_MATH_BIG_CONSTANT(T, 64, 4.49281223045653491929), BOOST_MATH_BIG_CONSTANT(T, 64, 3.84900294427622911374), @@ -921,7 +921,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<64>& tag) BOOST_MATH_BIG_CONSTANT(T, 64, 137839271.592778020028) }; static const T Q[9] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 27.2103343964943718802), BOOST_MATH_BIG_CONSTANT(T, 64, -8785.48528692879413676), BOOST_MATH_BIG_CONSTANT(T, 64, 397530.290000322626766), @@ -989,7 +989,7 @@ void expint_i_imp_113a(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, 0.306243138978114692252817805327426657e-13) }; static const T Q[15] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, -1.40178870313943798705491944989231793), BOOST_MATH_BIG_CONSTANT(T, 113, 0.943810968269701047641218856758605284), BOOST_MATH_BIG_CONSTANT(T, 113, -0.405026631534345064600850391026113165), @@ -1057,7 +1057,7 @@ void expint_i_113b(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, -0.384276705503357655108096065452950822e-12) }; static const T Q[15] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.58784732785354597996617046880946257), BOOST_MATH_BIG_CONSTANT(T, 113, 1.18550755302279446339364262338114098), BOOST_MATH_BIG_CONSTANT(T, 113, 0.55598993549661368604527040349702836), @@ -1110,7 +1110,7 @@ void expint_i_113c(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, 0.869226483473172853557775877908693647e-15) }; static const T Q[15] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.23227220874479061894038229141871087), BOOST_MATH_BIG_CONSTANT(T, 113, 2.40221000361027971895657505660959863), BOOST_MATH_BIG_CONSTANT(T, 113, 1.65476320985936174728238416007084214), @@ -1159,7 +1159,7 @@ void expint_i_113d(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, -0.133141358866324100955927979606981328e-10) }; static const T Q[14] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.72490783907582654629537013560044682), BOOST_MATH_BIG_CONSTANT(T, 113, 1.44524329516800613088375685659759765), BOOST_MATH_BIG_CONSTANT(T, 113, 0.778241785539308257585068744978050181), @@ -1211,7 +1211,7 @@ void expint_i_113e(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, -0.105428907085424234504608142258423505e-8) }; static const T Q[16] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 3.17261315255467581204685605414005525), BOOST_MATH_BIG_CONSTANT(T, 113, 4.85267952971640525245338392887217426), BOOST_MATH_BIG_CONSTANT(T, 113, 4.74341914912439861451492872946725151), @@ -1262,7 +1262,7 @@ void expint_i_113f(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, -0.107839681938752337160494412638656696e-8) }; static const T Q[12] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.09913805456661084097134805151524958), BOOST_MATH_BIG_CONSTANT(T, 113, 2.07041755535439919593503171320431849), BOOST_MATH_BIG_CONSTANT(T, 113, 1.26406517226052371320416108604874734), @@ -1308,7 +1308,7 @@ void expint_i_113g(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, -0.720558173805289167524715527536874694e-7) }; static const T Q[11] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 2.95918362458402597039366979529287095), BOOST_MATH_BIG_CONSTANT(T, 113, 3.96472247520659077944638411856748924), BOOST_MATH_BIG_CONSTANT(T, 113, 3.15563251550528513747923714884142131), @@ -1351,7 +1351,7 @@ void expint_i_113h(T& result, const T& z) BOOST_MATH_BIG_CONSTANT(T, 113, -6758379.93672362080947905580906028645) }; static const T Q[10] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, -99.4868026047611434569541483506091713), BOOST_MATH_BIG_CONSTANT(T, 113, 3879.67753690517114249705089803055473), BOOST_MATH_BIG_CONSTANT(T, 113, -76495.82413252517165830203774900806), @@ -1432,7 +1432,7 @@ T expint_i_imp(T z, const Policy& pol, const mpl::int_<113>& tag) BOOST_MATH_BIG_CONSTANT(T, 113, 175864.614717440010942804684741336853) }; static const T Q[9] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, -65.6998869881600212224652719706425129), BOOST_MATH_BIG_CONSTANT(T, 113, 1642.73850032324014781607859416890077), BOOST_MATH_BIG_CONSTANT(T, 113, -19937.2610222467322481947237312818575), diff --git a/include/boost/math/special_functions/lanczos.hpp b/include/boost/math/special_functions/lanczos.hpp index ed891549f..0db21d3d1 100644 --- a/include/boost/math/special_functions/lanczos.hpp +++ b/include/boost/math/special_functions/lanczos.hpp @@ -1068,7 +1068,7 @@ struct lanczos24m113 : public mpl::int_<113> static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 2.50662827463100050241576528481104515966515623051532908941425544355490413900497467936202516)) }; static const T denom[24] = { - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.112400072777760768e22)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.414847677933545472e22)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 6756146673770930688000.0)), @@ -1087,11 +1087,11 @@ struct lanczos24m113 : public mpl::int_<113> static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 3256091103430.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 136717357942.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 4546047198.0)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 30107)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 253)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 1)) + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 30107.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 253.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 1.0)) }; return boost::math::tools::evaluate_rational(num, denom, z); } @@ -1127,7 +1127,7 @@ struct lanczos24m113 : public mpl::int_<113> static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.374799931707148855771381263542708435935402853962736029347951399323367765509988401336565436e-8)) }; static const T denom[24] = { - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.112400072777760768e22)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 0.414847677933545472e22)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 6756146673770930688000.0)), @@ -1146,11 +1146,11 @@ struct lanczos24m113 : public mpl::int_<113> static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 3256091103430.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 136717357942.0)), static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 4546047198.0)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 30107)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 253)), - static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 1)) + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 116896626.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 2240315.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 30107.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 253.0)), + static_cast(BOOST_MATH_BIG_CONSTANT(T, 113, 1.0)) }; return boost::math::tools::evaluate_rational(num, denom, z); } diff --git a/include/boost/math/special_functions/log1p.hpp b/include/boost/math/special_functions/log1p.hpp index 989bdc21b..62f5b8027 100644 --- a/include/boost/math/special_functions/log1p.hpp +++ b/include/boost/math/special_functions/log1p.hpp @@ -195,7 +195,7 @@ T log1p_imp(T const& x, const Policy& pol, const mpl::int_<64>&) BOOST_MATH_BIG_CONSTANT(T, 64, 0.00441709903782239229447) }; static const T Q[] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 4.26423872346263928361), BOOST_MATH_BIG_CONSTANT(T, 64, 7.48189472704477708962), BOOST_MATH_BIG_CONSTANT(T, 64, 6.94757016732904280913), diff --git a/include/boost/math/special_functions/zeta.hpp b/include/boost/math/special_functions/zeta.hpp index d058406c6..46c0bc7ae 100644 --- a/include/boost/math/special_functions/zeta.hpp +++ b/include/boost/math/special_functions/zeta.hpp @@ -378,7 +378,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<64>&) BOOST_MATH_BIG_CONSTANT(T, 64, -0.279496685273033761927e-4), }; static const T Q[7] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, -0.30425480068225790522), BOOST_MATH_BIG_CONSTANT(T, 64, 0.050052748580371598736), BOOST_MATH_BIG_CONSTANT(T, 64, -0.00519355671064700627862), @@ -406,7 +406,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<64>&) BOOST_MATH_BIG_CONSTANT(T, 64, 0.700867470265983665042e-5), }; static const T Q[7] = { - BOOST_MATH_BIG_CONSTANT(T, 64, 1), + BOOST_MATH_BIG_CONSTANT(T, 64, 1.0), BOOST_MATH_BIG_CONSTANT(T, 64, 0.259385759149531030085), BOOST_MATH_BIG_CONSTANT(T, 64, 0.0373974962106091316854), BOOST_MATH_BIG_CONSTANT(T, 64, 0.00332735159183332820617), @@ -554,7 +554,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) // Max error found at long double precision: 7.281332e-31 static const T P[10] = { - BOOST_MATH_BIG_CONSTANT(T, 113, -1), + BOOST_MATH_BIG_CONSTANT(T, 113, -1.0), BOOST_MATH_BIG_CONSTANT(T, 113, -0.0353008629988648122808504280990313668), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0107795651204927743049369868548706909), BOOST_MATH_BIG_CONSTANT(T, 113, 0.000523961870530500751114866884685172975), @@ -566,7 +566,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, 0.113103113698388531428914333768142527e-10), }; static const T Q[11] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, -0.387483472099602327112637481818565459), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0802265315091063135271497708694776875), BOOST_MATH_BIG_CONSTANT(T, 113, -0.0110727276164171919280036408995078164), @@ -600,7 +600,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.835774625259919268768735944711219256e-11), }; static const T Q[11] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.316661751179735502065583176348292881), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0540401806533507064453851182728635272), BOOST_MATH_BIG_CONSTANT(T, 113, 0.00598621274107420237785899476374043797), @@ -636,7 +636,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, 0.340169592866058506675897646629036044e-12), }; static const T Q[12] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.363755247765087100018556983050520554), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0696581979014242539385695131258321598), BOOST_MATH_BIG_CONSTANT(T, 113, 0.00882208914484611029571547753782014817), @@ -675,7 +675,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.15090220092460596872172844424267351e-10), }; static const T Q[14] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 1.69490865837142338462982225731926485), BOOST_MATH_BIG_CONSTANT(T, 113, 1.22697696630994080733321401255942464), BOOST_MATH_BIG_CONSTANT(T, 113, 0.495409420862526540074366618006341533), @@ -715,7 +715,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.420204769185233365849253969097184005e-12), }; static const T Q[14] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.97663511666410096104783358493318814), BOOST_MATH_BIG_CONSTANT(T, 113, 0.40878780231201806504987368939673249), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0963890666609396058945084107597727252), @@ -753,7 +753,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.289187187441625868404494665572279364e-15), }; static const T Q[14] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.427310044448071818775721584949868806), BOOST_MATH_BIG_CONSTANT(T, 113, 0.074602514873055756201435421385243062), BOOST_MATH_BIG_CONSTANT(T, 113, 0.00688651562174480772901425121653945942), @@ -792,7 +792,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.402663128248642002351627980255756363e-16), }; static const T Q[14] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.311288325355705609096155335186466508), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0438318468940415543546769437752132748), BOOST_MATH_BIG_CONSTANT(T, 113, 0.00374396349183199548610264222242269536), @@ -831,7 +831,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const mpl::int_<113>&) BOOST_MATH_BIG_CONSTANT(T, 113, -0.376708747782400769427057630528578187e-19), }; static const T Q[16] = { - BOOST_MATH_BIG_CONSTANT(T, 113, 1), + BOOST_MATH_BIG_CONSTANT(T, 113, 1.0), BOOST_MATH_BIG_CONSTANT(T, 113, 0.205076752981410805177554569784219717), BOOST_MATH_BIG_CONSTANT(T, 113, 0.0202526722696670378999575738524540269), BOOST_MATH_BIG_CONSTANT(T, 113, 0.001278305290005994980069466658219057), diff --git a/include/boost/math/tools/big_constant.hpp b/include/boost/math/tools/big_constant.hpp index c5654b1aa..9be8e4138 100644 --- a/include/boost/math/tools/big_constant.hpp +++ b/include/boost/math/tools/big_constant.hpp @@ -12,30 +12,31 @@ #include #endif #include +#include namespace boost{ namespace math{ namespace tools{ template -inline BOOST_CONSTEXPR_OR_CONST T make_big_value(long double v, const char*, mpl::true_ const&, mpl::false_ const&) +inline BOOST_CONSTEXPR_OR_CONST T make_big_value(boost::floatmax_t v, const char*, mpl::true_ const&, mpl::false_ const&) { return static_cast(v); } template -inline BOOST_CONSTEXPR_OR_CONST T make_big_value(long double v, const char*, mpl::true_ const&, mpl::true_ const&) +inline BOOST_CONSTEXPR_OR_CONST T make_big_value(boost::floatmax_t v, const char*, mpl::true_ const&, mpl::true_ const&) { return static_cast(v); } #ifndef BOOST_MATH_NO_LEXICAL_CAST template -inline T make_big_value(long double, const char* s, mpl::false_ const&, mpl::false_ const&) +inline T make_big_value(boost::floatmax_t, const char* s, mpl::false_ const&, mpl::false_ const&) { return boost::lexical_cast(s); } #endif template -inline BOOST_CONSTEXPR const char* make_big_value(long double, const char* s, mpl::false_ const&, mpl::true_ const&) +inline BOOST_CONSTEXPR const char* make_big_value(boost::floatmax_t, const char* s, mpl::false_ const&, mpl::true_ const&) { return s; } @@ -45,13 +46,13 @@ inline BOOST_CONSTEXPR const char* make_big_value(long double, const char* s, mp // #define BOOST_MATH_BIG_CONSTANT(T, D, x)\ boost::math::tools::make_big_value(\ - BOOST_JOIN(x, L), \ + BOOST_FLOATMAX_C(x), \ BOOST_STRINGIZE(x), \ - mpl::bool_< (is_convertible::value) && \ - ((D <= std::numeric_limits::digits) \ + mpl::bool_< (is_convertible::value) && \ + ((D <= std::numeric_limits::digits) \ || is_floating_point::value \ || (std::numeric_limits::is_specialized && \ - (std::numeric_limits::digits10 <= std::numeric_limits::digits10))) >(), \ + (std::numeric_limits::digits10 <= std::numeric_limits::digits10))) >(), \ boost::is_convertible()) // // For constants too huge for any conceivable long double (and which generate compiler errors if we try and declare them as such): diff --git a/include/boost/math/tools/config.hpp b/include/boost/math/tools/config.hpp index dba63096e..1d18ff439 100644 --- a/include/boost/math/tools/config.hpp +++ b/include/boost/math/tools/config.hpp @@ -217,6 +217,18 @@ // intel too don't support __float128 yet :-( // # define BOOST_MATH_USE_FLOAT128 + +# if defined(BOOST_INTEL) && defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION >= 1310) && defined(__GNUC__) +# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) +# define BOOST_MATH_FLOAT128_TYPE __float128 +# endif +# elif defined(__GNUC__) +# define BOOST_MATH_FLOAT128_TYPE __float128 +# endif + +# ifndef BOOST_MATH_FLOAT128_TYPE +# define BOOST_MATH_FLOAT128_TYPE _Quad +# endif #endif // // Check for WinCE with no iostream support: diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 89562a75c..6fd88ab0e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -789,6 +789,12 @@ run compile_test/sf_sqrt1pm1_incl_test.cpp compile_test_main ; run compile_test/sf_trunc_incl_test.cpp compile_test_main ; run compile_test/sf_zeta_incl_test.cpp compile_test_main ; run compile_test/std_real_concept_check.cpp ; +run compile_test/cstdfloat_concept_check_1.cpp + : : : [ check-target-builds ../config//has_intel_quad "Intel _Quad datatype support" : -Qoption,cpp,--extended_float_type ] + [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ; +run compile_test/cstdfloat_concept_check_2.cpp ; +run compile_test/cstdfloat_concept_check_3.cpp ; +run compile_test/cstdfloat_concept_check_4.cpp ; run compile_test/sf_airy_incl_test.cpp compile_test_main ; run compile_test/sf_hankel_incl_test.cpp compile_test_main ; run compile_test/sf_jacobi_incl_test.cpp compile_test_main ; @@ -835,10 +841,10 @@ run test_signed_zero.cpp ../../test/build//boost_unit_test_framework ; run complex_test.cpp ../../test/build//boost_unit_test_framework ; -compile multiprc_concept_check_1.cpp : off msvc:/bigobj ; -compile multiprc_concept_check_2.cpp : off msvc:/bigobj ; -compile multiprc_concept_check_3.cpp : off msvc:/bigobj ; -compile multiprc_concept_check_4.cpp : off msvc:/bigobj ; +compile multiprc_concept_check_1.cpp : off msvc:/bigobj release ; +compile multiprc_concept_check_2.cpp : off msvc:/bigobj release ; +compile multiprc_concept_check_3.cpp : off msvc:/bigobj release ; +compile multiprc_concept_check_4.cpp : off msvc:/bigobj release ; compile ntl_concept_check.cpp : [ check-target-builds ../config//has_ntl_rr : : no ] off ; compile mpfr_concept_check.cpp : [ check-target-builds ../config//has_mpfr_class : : no ] off ; compile mpreal_concept_check.cpp : [ check-target-builds ../config//has_mpreal : : no ] off ; diff --git a/test/compile_test/cstdfloat_concept_check_1.cpp b/test/compile_test/cstdfloat_concept_check_1.cpp new file mode 100644 index 000000000..3bdc27cf5 --- /dev/null +++ b/test/compile_test/cstdfloat_concept_check_1.cpp @@ -0,0 +1,22 @@ +// Copyright John Maddock 2014. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false + +#include "poison.hpp" + +#include +#include + +#include "instantiate.hpp" + +int main(int argc, char*[]) +{ +#ifdef BOOST_FLOAT128_C + if(argc > 1000) + instantiate(BOOST_FLOAT128_C(1.23)); +#endif +} + diff --git a/test/compile_test/cstdfloat_concept_check_2.cpp b/test/compile_test/cstdfloat_concept_check_2.cpp new file mode 100644 index 000000000..e63d839b2 --- /dev/null +++ b/test/compile_test/cstdfloat_concept_check_2.cpp @@ -0,0 +1,23 @@ +// Copyright John Maddock 2014. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false + +#include "poison.hpp" + +#include +#include + +#include "instantiate.hpp" + + +int main(int argc, char*[]) +{ +#ifdef BOOST_FLOAT80_C + if(argc > 1000) + instantiate(BOOST_FLOAT80_C(1.23)); +#endif +} + diff --git a/test/compile_test/cstdfloat_concept_check_3.cpp b/test/compile_test/cstdfloat_concept_check_3.cpp new file mode 100644 index 000000000..149b1048e --- /dev/null +++ b/test/compile_test/cstdfloat_concept_check_3.cpp @@ -0,0 +1,23 @@ +// Copyright John Maddock 2014. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false + +#include "poison.hpp" + +#include +#include + +#include "instantiate.hpp" + + +int main(int argc, char*[]) +{ +#ifdef BOOST_FLOAT64_C + if(argc > 1000) + instantiate(BOOST_FLOAT64_C(1.23)); +#endif +} + diff --git a/test/compile_test/cstdfloat_concept_check_4.cpp b/test/compile_test/cstdfloat_concept_check_4.cpp new file mode 100644 index 000000000..d1962a83d --- /dev/null +++ b/test/compile_test/cstdfloat_concept_check_4.cpp @@ -0,0 +1,23 @@ +// Copyright John Maddock 2014. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#define BOOST_MATH_ASSERT_UNDEFINED_POLICY false + +#include "poison.hpp" + +#include +#include + +#include "instantiate.hpp" + + +int main(int argc, char*[]) +{ +#ifdef BOOST_FLOAT32_C + if(argc > 1000) + instantiate(BOOST_FLOAT32_C(1.23)); +#endif +} +