From 5f89e70efd2945897b3e73be9ce6eefaf51d26cd Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Tue, 21 Oct 2014 13:12:26 +0100 Subject: [PATCH] [Polygamma] Add test cases. Rewrite polygamma_atinfinityplus to avoid spurious underflow/overflow. Rewrite polygamma_attransitionplus to call polygamma_atinfinityplus rather than have it's own routine. Change condition which selects when polygamma_atinfinityplus can be called. --- .../special_functions/detail/polygamma.hpp | 260 ++++++------------ test/test_polygamma.cpp | 52 ++++ test/test_polygamma.hpp | 137 +++++++++ 3 files changed, 276 insertions(+), 173 deletions(-) create mode 100644 test/test_polygamma.cpp create mode 100644 test/test_polygamma.hpp diff --git a/include/boost/math/special_functions/detail/polygamma.hpp b/include/boost/math/special_functions/detail/polygamma.hpp index acfe77b5e..e86855c36 100644 --- a/include/boost/math/special_functions/detail/polygamma.hpp +++ b/include/boost/math/special_functions/detail/polygamma.hpp @@ -23,61 +23,7 @@ #include #include - namespace boost { namespace math { namespace detail { - - template - struct max_iteration - { - //TODO Derive a suitable formula based on the precision of T - static const int value=2500; - }; - - template - bool factorial_overflow(const int n) - { - // Use Stirling's approximation to check if n! would overflow when data type is T. - static const long int max_precision = std::numeric_limits::max_exponent10; - - T nn = T(n); - T log_n = log(nn); - T n_log_n = n * log_n; - T n_log_n_minus_n = n_log_n - n; - T base_10 = n_log_n_minus_n/log(10); - long int base_10_ceil = boost::math::ltrunc(base_10) + 1; - - // Since nlogn - n < log(n!) by a small margin, we add 10 as safety measure. - return (((base_10_ceil + 10) > max_precision )? 1 : 0); - } - - template - int possible_factorial_overflow_index() - { - // we use binary search to determine a good approximation for an index that might overflow - - int upper_limit = max_iteration::value; - int lower_limit = 8; - - if(factorial_overflow(upper_limit) == 0) - { - return upper_limit; - } - - while(upper_limit > (lower_limit + 4)) - { - const int mid = (upper_limit + lower_limit) / 2; - - if(factorial_overflow(mid) == 0) - { - lower_limit = mid; - } - else - { - upper_limit = mid; - } - } - - return lower_limit; - } + namespace boost { namespace math { template T digamma_atinfinityplus(const int, const T &x, const Policy&) @@ -135,85 +81,104 @@ template T polygamma_atinfinityplus(const int n, const T& x, const Policy& pol) // for large values of x such as for x> 400 { + // See http://functions.wolfram.com/GammaBetaErf/PolyGamma2/06/02/0001/ BOOST_MATH_STD_USING - - if(n == 0) + // + // sum == current value of accumulated sum. + // term == value of current term to be added to sum. + // part_term == value of current term excluding the Bernoulli number part + // + T term, sum, part_term; + T x_squared = x * x; + // + // Start by setting part_term to: + // + // (n-1)! / x^(n+1) + // + // which is common to both the first term of the series (with k = 1) + // and to the leading part. + // We can then get to the leading term by: + // + // part_term * (n + 2 * x) / 2 + // + // and to the first term in the series + // (excluding the Bernoulli number) by: + // + // part_term n * (n + 1) / (2x) + // + // If either the factorial would overflow, + // or the power term underflows, this just gets set to 0 and then we + // know that we have to use logs for the initial terms: + // + part_term = ((n > boost::math::max_factorial::value) && (n * n > tools::log_max_value())) + ? 0 : boost::math::factorial(n - 1, pol) * pow(x, -n - 1); + if(part_term == 0) { - return digamma_atinfinityplus(n, x, pol); + // Either n is very large, or the power term underflows, + // set the initial values of part_term, term and sum via logs: + part_term = boost::math::lgamma(n, pol) - (n + 1) * log(x); + sum = exp(part_term + log(n + 2 * x) - boost::math::constants::ln_two()); + part_term += log(n * (n + 1)) - boost::math::constants::ln_two() - log(x); + part_term = exp(part_term); } - - const bool b_negate = ((n % 2) == 0); - - const T n_minus_one_fact = boost::math::factorial(n - 1); - const T nn = T(n); - const T n_fact = n_minus_one_fact * nn; - const T one_over_z = T(1) / x; - const T one_over_z2 = one_over_z * one_over_z; - const T one_over_z_pow_n = T(1) / pow(x, n); - T one_over_x_pow_two_k_plus_n = one_over_z_pow_n * one_over_z2; - T two_k_plus_n_minus_one = nn + T(1); - T two_k_plus_n_minus_one_fact = n_fact * (n + 1); //(n+3)! ? - T one_over_two_k_fact = T(1) / 2; - T sum = ( (boost::math::bernoulli_b2n(1) * two_k_plus_n_minus_one_fact) - * (one_over_two_k_fact * one_over_x_pow_two_k_plus_n)); - - // Perform the Bernoulli series expansion. - for(int two_k = 4; two_k < max_iteration::value; two_k += 2) + else { + sum = part_term * (n + 2 * x) / 2; + part_term *= n * (n + 1) / 2; + part_term /= x; + } + // + // If the leading term is 0, so is the result: + // + if(sum == 0) + return sum; - one_over_x_pow_two_k_plus_n *= one_over_z2; - two_k_plus_n_minus_one_fact *= ++two_k_plus_n_minus_one; - two_k_plus_n_minus_one_fact *= ++two_k_plus_n_minus_one; - one_over_two_k_fact /= static_cast(two_k * static_cast(two_k - static_cast(1))); - - const T term = ( (boost::math::bernoulli_b2n(two_k/2) * two_k_plus_n_minus_one_fact) - * (one_over_two_k_fact * one_over_x_pow_two_k_plus_n)); - - if(term == 0) - { - continue; - } - + for(unsigned k = 1;;) + { + term = part_term * boost::math::bernoulli_b2n(k, pol); sum += term; - - T term_base_10_exp = ((term < 0) ? -term : term); - T sum_base_10_exp = ((sum < 0) ? -sum : sum); - - int exponent_value; - - static_cast(frexp(term_base_10_exp, &exponent_value)); - term_base_10_exp = T(exponent_value) * 0.303F; - - static_cast(frexp(sum_base_10_exp, &exponent_value)); - sum_base_10_exp = T(exponent_value) * 0.303F; - - long int order_check = boost::math::ltrunc(term_base_10_exp) - boost::math::ltrunc(sum_base_10_exp); - long int tol = std::numeric_limits::digits10; - - if((two_k > 24) && (order_check < -tol)) + // + // Normal termination condition: + // + if(fabs(term / sum) < tools::epsilon()) + break; + // + // Increment our counter, and move part_term on to the next value: + // + ++k; + part_term *= (n + 2 * k - 2) * (n - 1 + 2 * k); + part_term /= (2 * k - 1) * 2 * k; + part_term /= x_squared; + // + // Emergency get out termination condition: + // + if(k > policies::get_max_series_iterations()) { - break; + policies::raise_evaluation_error( + "polygamma<%1%>(int, %1%)", + "Series did not converge, closest value was %1%", sum, pol); + break; } } + + if((n - 1) & 1) + sum = -sum; - sum += ((((n_minus_one_fact * (nn + (x * static_cast(2)))) * one_over_z_pow_n) * one_over_z) / 2); - - return ((!b_negate) ? sum : -sum); + return sum; } template - T polygamma_attransitionplus(const int n, const T& x, const Policy&) + T polygamma_attransitionplus(const int n, const T& x, const Policy& pol) { - // this doesn't work for digamma either + // See: http://functions.wolfram.com/GammaBetaErf/PolyGamma2/16/01/01/0017/ - // Use Euler-Maclaurin summation. - - // Use N = (0.4 * digits) + (4 * n) + // Use N = (0.4 * digits) + (4 * n) for target value for x: BOOST_MATH_STD_USING const int d4d = static_cast(0.4F * std::numeric_limits::digits10); const int N4dn = static_cast(d4d + (4 * n)); const int N = static_cast((std::min)(N4dn, (std::numeric_limits::max)())); const int m = n; + const int iter = N - itrunc(x); const int minus_m_minus_one = -m - 1; @@ -221,69 +186,18 @@ T sum0(0); T z_plus_k_pow_minus_m_minus_one(0); - for(int k = 1; k <= N; ++k) + // Forward recursion to larger x: + for(int k = 1; k <= iter; ++k) { z_plus_k_pow_minus_m_minus_one = pow(z, minus_m_minus_one); sum0 += z_plus_k_pow_minus_m_minus_one; ++z; } + sum0 *= boost::math::factorial(n); + if((n - 1) & 1) + sum0 = -sum0; - const T one_over_z_plus_N_pow_minus_m = pow(z, -m); - const T one_over_z_plus_N_pow_minus_m_minus_one = one_over_z_plus_N_pow_minus_m / z; - - const T term0 = one_over_z_plus_N_pow_minus_m_minus_one / 2; - const T term1 = one_over_z_plus_N_pow_minus_m / m; - - T sum1 = T(0); - T one_over_two_k_fact = T(1) / 2; - int mk = m + 1; - T am = T(mk); - const T one_over_z_plus_N_squared = T(1) / (z * z); - T one_over_z_plus_N_pow_minus_m_minus_two_k = one_over_z_plus_N_pow_minus_m * one_over_z_plus_N_squared; - - for(int k = 1; k < max_iteration::value; ++k) - { - const int two_k = 2 * k; // k << 1 - - const T term = ((boost::math::bernoulli_b2n(two_k / 2) * am) * one_over_two_k_fact) * one_over_z_plus_N_pow_minus_m_minus_two_k; - - T term_base_10_exp = ((term < 0) ? -term : term); - T sum_base_10_exp = ((sum1 < 0) ? -sum1 : sum1); - - int exponent_value; - - static_cast(frexp(term_base_10_exp, &exponent_value)); - term_base_10_exp = T(exponent_value) * 0.303F; - - static_cast(frexp(sum_base_10_exp, &exponent_value)); - sum_base_10_exp = T(exponent_value) * 0.303F; - - long int order_check = boost::math::ltrunc(term_base_10_exp) - boost::math::ltrunc(sum_base_10_exp); - long int tol = std::numeric_limits::digits10; - - if((two_k > 24) && (order_check < -tol)) - { - break; - } - - sum1 += term; - - one_over_two_k_fact /= (two_k + 1); - one_over_two_k_fact /= (two_k + 2); - - ++mk; - am *= mk; - ++mk; - am *= mk; - - one_over_z_plus_N_pow_minus_m_minus_two_k *= one_over_z_plus_N_squared; - } - - const T pg = (((sum0 + term0) + term1) + sum1) * factorial(m); - - const bool b_negate = ((m % 2) == 0); - - return ((!b_negate) ? pg : -pg); + return sum0 + polygamma_atinfinityplus(n, z, pol); } template @@ -355,9 +269,9 @@ { return polygamma_nearzero(n, x, pol); } - else if (x > 400.0F) + else if(x > 0.4F * std::numeric_limits::digits10 + 4 * n) { - return polygamma_atinfinityplus(n, x, pol); //just a test return value + return polygamma_atinfinityplus(n, x, pol); } else { diff --git a/test/test_polygamma.cpp b/test/test_polygamma.cpp new file mode 100644 index 000000000..c42ca6df6 --- /dev/null +++ b/test/test_polygamma.cpp @@ -0,0 +1,52 @@ +// (C) 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) + +#include +#include "test_polygamma.hpp" + + +void expected_results() +{ + // + // Define the max and mean errors expected for + // various compilers and platforms. + // + const char* largest_type; +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS + if(boost::math::policies::digits >() == boost::math::policies::digits >()) + { + largest_type = "(long\\s+)?double"; + } + else + { + largest_type = "long double"; + } +#else + largest_type = "(long\\s+)?double"; +#endif + + // + // Finish off by printing out the compiler/stdlib/platform names, + // we do this to make it easier to mark up expected error rates. + // + std::cout << "Tests run with " << BOOST_COMPILER << ", " + << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl; +} + +BOOST_AUTO_TEST_CASE( test_main ) +{ + expected_results(); + BOOST_MATH_CONTROL_FP; + + //test_polygamma(0.0F, "float"); + test_polygamma(0.0, "double"); +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS + test_polygamma(0.0L, "long double"); + //test_polygamma(boost::math::concepts::real_concept(0.1), "real_concept"); +#endif +} + + + diff --git a/test/test_polygamma.hpp b/test/test_polygamma.hpp new file mode 100644 index 000000000..fe5433f3e --- /dev/null +++ b/test/test_polygamma.hpp @@ -0,0 +1,137 @@ +// Copyright John Maddock 20 +// Copyright Paul A. Bristow 2007, 2009 +// 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_OVERFLOW_ERROR_POLICY ignore_error + +#include +#include +#include +#define BOOST_TEST_MAIN +#include +#include +#include +#include +#include +#include +#include +#include "functor.hpp" + +#include "handle_test_result.hpp" +#include "table_type.hpp" + +#ifndef SC_ +#define SC_(x) static_cast::type>(BOOST_JOIN(x, L)) +#endif + +template +void do_test_polygamma(const T& data, const char* type_name, const char* test_name) +{ + typedef Real value_type; + + typedef value_type(*pg)(int, value_type); +#if defined(BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS) + pg funcp = boost::math::polygamma; +#else + pg funcp = boost::math::polygamma; +#endif + + boost::math::tools::test_result result; + + std::cout << "Testing " << test_name << " with type " << type_name + << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; + + // + // test polygamma against data: + // + result = boost::math::tools::test_hetero( + data, + bind_func_int1(funcp, 0, 1), + extract_result(2)); + handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::polygamma", test_name); + std::cout << std::endl; +} + +template +void test_polygamma(T, const char* name) +{ + typedef typename table_type::type value_type; + + boost::array, 384> data = + { { + { 1, SC_(0.1250000), SC_(65.388133444988034473142999334395961) }, { 1, SC_(2.250000), SC_(0.55732915450711073927131911933522402) }, { 1, SC_(4.375000), SC_(0.25666408805722660683906428275458774) }, { 1, SC_(6.500000), SC_(0.16628453574995823763989666631218566) }, { 1, SC_(8.625000), SC_(0.12292237374423990274075995315923687) }, { 1, SC_(10.75000), SC_(0.097483848201852104395946001854344927) }, { 1, SC_(12.87500), SC_(0.080764208092843621858393487209278638) }, { 1, SC_(15.00000), SC_(0.068938227847683806226155216756371670) }, { 1, SC_(17.12500), SC_(0.060132263162293455894576107399989891) }, { 1, SC_(19.25000), SC_(0.053320703915617277211139745531295189) }, { 1, SC_(21.37500), SC_(0.047895038036916716105500109226810942) }, { 1, SC_(23.50000), SC_(0.043471416266946770249685779030294199) }, { 1, SC_(25.62500), SC_(0.039795743807625238080963836217545550) }, { 1, SC_(27.75000), SC_(0.036693131333593477569076090983653779) }, { 1, SC_(29.87500), SC_(0.034039266877179098641898178094001935) }, { 1, SC_(32.00000), SC_(0.031743366520302090126581680438741427) }, { 1, SC_(34.12500), SC_(0.029737585673522726661363528635488348) }, { 1, SC_(36.25000), SC_(0.027970204614894933106878169214392067) }, { 1, SC_(38.37500), SC_(0.026401106865951764123858232364900665) }, { 1, SC_(40.50000), SC_(0.024998698201356741322280011143883922) }, { 1, SC_(42.62500), SC_(0.023737757818075642720991864115881164) }, { 1, SC_(44.75000), SC_(0.022597908441287364284087900916682571) }, { 1, SC_(46.87500), SC_(0.021562506914486557632388530071308920) }, { 1, SC_(49.00000), SC_(0.020617826354560516060031453062401102) }, { 1, SC_(51.12500), SC_(0.019752444228552790805040230288386135) }, { 1, SC_(53.25000), SC_(0.018956778300513446216011889734099110) }, { 1, SC_(55.37500), SC_(0.018222730375562878627773770314126276) }, { 1, SC_(57.50000), SC_(0.017543409716574620734228673575882677) }, { 1, SC_(59.62500), SC_(0.016912916093398919581541485278641593) }, { 1, SC_(61.75000), SC_(0.016326167985389235938281994221076159) }, { 1, SC_(63.87500), SC_(0.015778765341125640054231784371915358) }, { 1, SC_(66.00000), SC_(0.015266879048806385777045778219279459) }, { 1, SC_(68.12500), SC_(0.014787161242916062152535888615850260) }, { 1, SC_(70.25000), SC_(0.014336672004276912093324664070489886) }, { 1, SC_(72.37500), SC_(0.013912819061256593888508241399678441) }, { 1, SC_(74.50000), SC_(0.013513307879079644573772830117155790) }, { 1, SC_(76.62500), SC_(0.013136100107643257539226305043251166) }, { 1, SC_(78.75000), SC_(0.012779378799112389298746113446648982) }, { 1, SC_(80.87500), SC_(0.012441519142554280549428650598112729) }, { 1, SC_(83.00000), SC_(0.012121063720980953787190412456820037) }, { 1, SC_(85.12500), SC_(0.011816701495952671887865236708275449) }, { 1, SC_(87.25000), SC_(0.011527249880640584213306489206202069) }, { 1, SC_(89.37500), SC_(0.011251639384481213426240562514542477) }, { 1, SC_(91.50000), SC_(0.010988900409103388104670465071922664) }, { 1, SC_(93.62500), SC_(0.010738151851930343087942933225290955) }, { 1, SC_(95.75000), SC_(0.010498591235178571927709342934117247) }, { 1, SC_(97.87500), SC_(0.010269486127251686167359605922136260) }, { 1, SC_(100.0000), SC_(0.010050166663333571395245668465701423) }, + { 2, SC_(0.1250000), -SC_(1025.7533381181356825956689300565174) }, { 2, SC_(2.250000), -SC_(0.30373993753692033333796717884398989) }, { 2, SC_(4.375000), -SC_(0.065528725397877855792664680804766330) }, { 2, SC_(6.500000), -SC_(0.027587910706876798794117450572831562) }, { 2, SC_(8.625000), -SC_(0.015091062676061564388822078971884395) }, { 2, SC_(10.75000), -SC_(0.0094956196449265900776488965631791775) }, { 2, SC_(12.87500), -SC_(0.0065193261909178260169885198194705291) }, { 2, SC_(15.00000), -SC_(0.0047506027165515547467791223768191188) }, { 2, SC_(17.12500), -SC_(0.0036148020016626802195565448384834283) }, { 2, SC_(19.25000), -SC_(0.0028424250740909855631736845850335535) }, { 2, SC_(21.37500), -SC_(0.0022934967923297751145806065882712900) }, { 2, SC_(23.50000), -SC_(0.0018894667868625909895476094900477678) }, { 2, SC_(25.62500), -SC_(0.0015834924252652953218803111387922996) }, { 2, SC_(27.75000), -SC_(0.0013462349527320363170378913859580860) }, { 2, SC_(29.87500), -SC_(0.0011585598948326545653381467670779893) }, { 2, SC_(32.00000), -SC_(0.0010075567602140907392185110593117265) }, { 2, SC_(34.12500), -SC_(0.00088425886906787461365402045268994574) }, { 2, SC_(36.25000), -SC_(0.00078228136778540401396894643668418462) }, { 2, SC_(38.37500), -SC_(0.00069697797537723210697105880606724159) }, { 2, SC_(40.50000), -SC_(0.00062490237932923289658683588812998732) }, { 2, SC_(42.62500), -SC_(0.00056345469641484389456121935536309197) }, { 2, SC_(44.75000), -SC_(0.00051064374134295093656385520125286421) }, { 2, SC_(46.87500), -SC_(0.00046492369550612086723038302919171885) }, { 2, SC_(49.00000), -SC_(0.00042507970884222510504308867471824948) }, { 2, SC_(51.12500), -SC_(0.00039014637079445100439645401142194535) }, { 2, SC_(53.25000), -SC_(0.00035934868438211062777790080207505881) }, { 2, SC_(55.37500), -SC_(0.00033205871518117505559928737076624192) }, { 2, SC_(57.50000), -SC_(0.00030776333242771756953580263456220628) }, { 2, SC_(59.62500), -SC_(0.00028603991345613245802207114123372414) }, { 2, SC_(61.75000), -SC_(0.00026653784162151616772904552992231739) }, { 2, SC_(63.87500), -SC_(0.00024896427102287300629668349085350311) }, { 2, SC_(66.00000), -SC_(0.00023307306946180321476975587412226332) }, { 2, SC_(68.12500), -SC_(0.00021865615382096049855997233359992101) }, { 2, SC_(70.25000), -SC_(0.00020553664405312492990454318541834320) }, { 2, SC_(72.37500), -SC_(0.00019356341228034103704385457246984425) }, { 2, SC_(74.50000), -SC_(0.00018260671130395075946075978013398780) }, { 2, SC_(76.62500), -SC_(0.00017255464497899193114313963889049197) }, { 2, SC_(78.75000), -SC_(0.00016331030013937037094502788633900241) }, { 2, SC_(80.87500), -SC_(0.00015478940207215993505449988937898640) }, { 2, SC_(83.00000), -SC_(0.00014691838710034332570083901051760808) }, { 2, SC_(85.12500), -SC_(0.00013963280957351165370765015817038278) }, { 2, SC_(87.25000), -SC_(0.00013287601856558888563037791437997733) }, { 2, SC_(89.37500), -SC_(0.00012659805332837531702241737466058293) }, { 2, SC_(91.50000), -SC_(0.00012075471712784846612240303590084686) }, { 2, SC_(93.62500), -SC_(0.00011530679728326736002584104318350829) }, { 2, SC_(95.75000), -SC_(0.00011021940561565095981861374083495299) }, { 2, SC_(97.87500), -SC_(0.00010546141852085692313553484671110170) }, { 2, SC_(100.0000), -SC_(0.00010100499983334999700083300446059382) }, + { 3, SC_(0.1250000), SC_(24580.143419063566218511004446647010) }, + { 3, SC_(2.250000), SC_(0.32454400918839602279124382903505677) }, + { 3, SC_(4.375000), SC_(0.033289201205556512286673394063908247) }, + { 3, SC_(6.500000), SC_(0.0091336635043781405048050655353658508) }, + { 3, SC_(8.625000), SC_(0.0037008460120616755687668778806054328) }, + { 3, SC_(10.75000), SC_(0.0018484328773891268475922730275004208) }, + { 3, SC_(12.87500), SC_(0.0010519186241203463873018930415985105) }, + { 3, SC_(15.00000), SC_(0.00065447977828273734841733708901750530) }, + { 3, SC_(17.12500), SC_(0.00043447135395979214393136263736764201) }, + { 3, SC_(19.25000), SC_(0.00030297696415718385912539504824566570) }, + { 3, SC_(21.37500), SC_(0.00021961042047214603636739002880115737) }, + { 3, SC_(23.50000), SC_(0.00016422394665239820056068884910278128) }, + { 3, SC_(25.62500), SC_(0.00012599930135391694524067581601102767) }, + { 3, SC_(27.75000), SC_(0.000098773010741268191080883613389009048) }, + { 3, SC_(29.87500), SC_(0.000078857844307768334137453508928722671) }, + { 3, SC_(32.00000), SC_(0.000063955754777976299576673673574642423) }, + { 3, SC_(34.12500), SC_(0.000052583702941352521813139097855885393) }, + { 3, SC_(36.25000), SC_(0.000043755438122384003302367816109980192) }, + { 3, SC_(38.37500), SC_(0.000036797707573246758497786056137200200) }, + { 3, SC_(40.50000), SC_(0.000031240239710655936422248716017582946) }, + { 3, SC_(42.62500), SC_(0.000026747791378195202271687207455056302) }, + { 3, SC_(44.75000), SC_(0.000023076997706632396178157160717335565) }, + { 3, SC_(46.87500), SC_(0.000020048287815935784161580614536631137) }, + { 3, SC_(49.00000), SC_(0.000017527197874026635143654793647828466) }, + { 3, SC_(51.12500), SC_(0.000015411686998050652806770684541876757) }, + { 3, SC_(53.25000), SC_(0.000013623370966529973793708331754693666) }, + { 3, SC_(55.37500), SC_(0.000012101363299593660023105041673385376) }, + { 3, SC_(57.50000), SC_(0.000010797882726896889062768134787291884) }, + { 3, SC_(59.62500), SC_(9.6750769605707758334815857396558355e-6) }, + { 3, SC_(61.75000), SC_(8.7026966259856900409582330070865268e-6) }, + { 3, SC_(63.87500), SC_(7.8563716857343030149244371160376495e-6) }, + { 3, SC_(66.00000), SC_(7.1163203299934132027680033779014197e-6) }, + { 3, SC_(68.12500), SC_(6.4663719906627627544882175944382226e-6) }, + { 3, SC_(70.25000), SC_(5.8932210515208497328937862935232496e-6) }, + { 3, SC_(72.37500), SC_(5.3858517367657111634358444590928906e-6) }, + { 3, SC_(74.50000), SC_(4.9350912436686398240670814427342376e-6) }, + { 3, SC_(76.62500), SC_(4.5332598242018110991734569100539592e-6) }, + { 3, SC_(78.75000), SC_(4.1738947808706992483423293125251133e-6) }, + { 3, SC_(80.87500), SC_(3.8515312659502461861484363442184908e-6) }, + { 3, SC_(83.00000), SC_(3.5615270636518630626786644585266764e-6) }, + { 3, SC_(85.12500), SC_(3.2999216708248315372665461067377996e-6) }, + { 3, SC_(87.25000), SC_(3.0633223042636924720337703682152499e-6) }, + { 3, SC_(89.37500), SC_(2.8488111819903247190925375784544775e-6) }, + { 3, SC_(91.50000), SC_(2.6538697141941088454844912572034392e-6) }, + { 3, SC_(93.62500), SC_(2.4763162120667457234467192228222670e-6) }, + { 3, SC_(95.75000), SC_(2.3142544621402797124759791203351867e-6) }, + { 3, SC_(97.87500), SC_(2.1660310796121506708372890790676070e-6) }, + { 3, SC_(100.0000), SC_(2.0301999900013330334332872946449855e-6) }, + + {4, SC_(0.1250000), SC_(-786445.98543106378579320120709638297)}, { 4, SC_(2.250000), SC_(-0.51106863793373355822715252195899576) }, { 4, SC_(4.375000), SC_(-0.025241882074562753654505456518792508) }, { 4, SC_(6.500000), SC_(-0.0045259302803220607103496010172883494) }, { 4, SC_(8.625000), SC_(-0.0013596929106556359886012273921730071) }, { 4, SC_(10.75000), SC_(-0.00053930828860547053427689740051604949) }, { 4, SC_(12.87500), SC_(-0.00025445997266103206171225355293726865) }, { 4, SC_(15.00000), SC_(-0.00013519619187519276575068431301221388) }, { 4, SC_(17.12500), SC_(-0.000078306716822025065793290599586946118) }, { 4, SC_(19.25000), SC_(-0.000048430513924395561509999792045098081) }, { 4, SC_(21.37500), SC_(-0.000031536705873201397805285969259914559) }, { 4, SC_(23.50000), SC_(-0.000021407049050977062373311093992814121) }, { 4, SC_(25.62500), SC_(-0.000015036764178343754461565939319516893) }, { 4, SC_(27.75000), SC_(-0.000010869219781124567432001391245344089) }, { 4, SC_(29.87500), SC_(-8.0504604926168752698902834477348881e-6) }, { 4, SC_(32.00000), SC_(-6.0889806370027137702207132674152980e-6) }, { 4, SC_(34.12500), SC_(-4.6901011823268163094417546531023856e-6) }, { 4, SC_(36.25000), SC_(-3.6708283086618325558290000911536581e-6) }, { 4, SC_(38.37500), SC_(-2.9139932244650290336213711603586301e-6) }, { 4, SC_(40.50000), SC_(-2.3425302303691304543510535971847968e-6) }, { 4, SC_(42.62500), SC_(-1.9045296486050512642801504306671373e-6) }, { 4, SC_(44.75000), SC_(-1.5642760453399369047824852836708697e-6) }, { 4, SC_(46.87500), SC_(-1.2967233822729326645555539185332769e-6) }, { 4, SC_(49.00000), SC_(-1.0840030171141394983603065427611252e-6) }, { 4, SC_(51.12500), SC_(-9.1316643010960703020517255319750485e-7) }, { 4, SC_(53.25000), SC_(-7.7469609700462921021995856208285815e-7) }, { 4, SC_(55.37500), SC_(-6.6150474476547305805911346012045165e-7) }, { 4, SC_(57.50000), SC_(-5.6825133351570053043820949353677183e-7) }, { 4, SC_(59.62500), SC_(-4.9086620236193161135912086142572580e-7) }, { 4, SC_(61.75000), SC_(-4.2621666772058776224801114961267801e-7) }, { 4, SC_(63.87500), SC_(-3.7186839586672891333608898041067112e-7) }, { 4, SC_(66.00000), SC_(-3.2591301914111222705427951896642626e-7) }, { 4, SC_(68.12500), SC_(-2.8684217920848561693233665614958777e-7) }, { 4, SC_(70.25000), SC_(-2.5345451083204479337777798526354757e-7) }, { 4, SC_(72.37500), SC_(-2.2478626654835416271537021644553013e-7) }, { 4, SC_(74.50000), SC_(-2.0005909073946645851596541397664333e-7) }, { 4, SC_(76.62500), SC_(-1.7864035957298817513241281766878220e-7) }, { 4, SC_(78.75000), SC_(-1.6001281551287093216803849072235519e-7) }, { 4, SC_(80.87500), SC_(-1.4375113796429048125939526070340983e-7) }, { 4, SC_(83.00000), SC_(-1.2950373350296884735201964028079076e-7) }, { 4, SC_(85.12500), SC_(-1.1697848507486443027254417751822546e-7) }, { 4, SC_(87.25000), SC_(-1.0593152651055065213702117539700727e-7) }, { 4, SC_(89.37500), SC_(-9.6158345290200883062520858433963680e-8) }, { 4, SC_(91.50000), SC_(-8.7486689164653963817234101603388082e-8) }, { 4, SC_(93.62500), SC_(-7.9770879280803145900384972987304463e-8) }, { 4, SC_(95.75000), SC_(-7.2887226653828502529665531368895369e-8) }, { 4, SC_(97.87500), SC_(-6.6730319180606630829991063550458595e-8) }, { 4, SC_(100.0000), SC_(-6.1209999300119967012993094755881001e-8) }, + { 9, SC_(0.1250000), SC_(3.8963943320506514766700086867372762e14) }, { 9, SC_(2.250000), SC_(112.10537259293726188704511169205760) }, { 9, SC_(4.375000), SC_(0.16363919906361224458550935569570297) }, { 9, SC_(6.500000), SC_(0.0036236228486465262827554601212241334) }, { 9, SC_(8.625000), SC_(0.00024724827512609608284324030730925865) }, { 9, SC_(10.75000), SC_(0.000031173409615380334086095590039151370) }, { 9, SC_(12.87500), SC_(5.7824557132102074668570643058203530e-6) }, { 9, SC_(15.00000), SC_(1.3980855499116564037825647833211369e-6) }, { 9, SC_(17.12500), SC_(4.1002910484982160273499509487840966e-7) }, { 9, SC_(19.25000), SC_(1.3928434419796988121776758599785632e-7) }, { 9, SC_(21.37500), SC_(5.3108201638858702713365922453188085e-8) }, { 9, SC_(23.50000), SC_(2.2228120959414339842295401083512930e-8) }, { 9, SC_(25.62500), SC_(1.0046019155325212007574589173916857e-8) }, { 9, SC_(27.75000), SC_(4.8421087709589697640039499715706350e-9) }, { 9, SC_(29.87500), SC_(2.4651114661905897591489828702449678e-9) }, { 9, SC_(32.00000), SC_(1.3154897461853304542190391130140025e-9) }, { 9, SC_(34.12500), SC_(7.3134444425276046658844002904667737e-10) }, { 9, SC_(36.25000), SC_(4.2146721224691157996140805304942419e-10) }, { 9, SC_(38.37500), SC_(2.5073387292785072270991813660631786e-10) }, { 9, SC_(40.50000), SC_(1.5344896969374692327054949367251260e-10) }, { 9, SC_(42.62500), SC_(9.6326225603670754883495513330468241e-11) }, { 9, SC_(44.75000), SC_(6.1868579168628392331266656512721531e-11) }, { 9, SC_(46.87500), SC_(4.0570340164556015067828668493424902e-11) }, { 9, SC_(49.00000), SC_(2.7111471879948743580114339016340155e-11) }, { 9, SC_(51.12500), SC_(1.8433178567812423799249519881074934e-11) }, { 9, SC_(53.25000), SC_(1.2733080158190412770374826663936684e-11) }, { 9, SC_(55.37500), SC_(8.9250208887659481803261595053553675e-12) }, { 9, SC_(57.50000), SC_(6.3408264036510339424452353875188095e-12) }, { 9, SC_(59.62500), SC_(4.5615718874164287974321379689375635e-12) }, { 9, SC_(61.75000), SC_(3.3199519699896432328216923633601725e-12) }, { 9, SC_(63.87500), SC_(2.4426063512782352683767956278168985e-12) }, { 9, SC_(66.00000), SC_(1.8153877149006577317987652651306379e-12) }, { 9, SC_(68.12500), SC_(1.3620688165735114474674715908706633e-12) }, { 9, SC_(70.25000), SC_(1.0310696339614726306516051424066462e-12) }, { 9, SC_(72.37500), SC_(7.8705425492600705644491688042239872e-13) }, { 9, SC_(74.50000), SC_(6.0553290145315817804599098427153448e-13) }, { 9, SC_(76.62500), SC_(4.6934676954218461465393390444338856e-13) }, { 9, SC_(78.75000), SC_(3.6634942521175284527379986400237305e-13) }, { 9, SC_(80.87500), SC_(2.8785887689513567008615786864512179e-13) }, { 9, SC_(83.00000), SC_(2.2761232508374172373558791779207099e-13) }, { 9, SC_(85.12500), SC_(1.8105271275784390697733304142062576e-13) }, { 9, SC_(87.25000), SC_(1.4483676610519321733096991924616972e-13) }, { 9, SC_(89.37500), SC_(1.1649247346426341778218700567243322e-13) }, { 9, SC_(91.50000), SC_(9.4178413859615655080323473554582586e-14) }, { 9, SC_(93.62500), SC_(7.6513170761508530170189422972149840e-14) }, { 9, SC_(95.75000), SC_(6.2453415533716351149737976646666822e-14) }, { 9, SC_(97.87500), SC_(5.1206083919072129278059542340974138e-14) }, { 9, SC_(100.0000), SC_(4.2164633350081151607323910418414347e-14) }, + { SC_(12), SC_(0.1250000), SC_(-2.6333391446175784623707514121843937e20) }, { SC_(12), SC_(2.250000), SC_(-12755.934552347367694976392995238872) }, { SC_(12), SC_(4.375000), SC_(-2.3995726885358590731215736760290659) }, { SC_(12), SC_(6.500000), SC_(-0.015498964669830504389631890538267195) }, { SC_(12), SC_(8.625000), SC_(-0.00043875188128348404126256495384460962) }, { SC_(12), SC_(10.75000), SC_(-0.000027944407762544917990491373502083128) }, { SC_(12), SC_(12.87500), SC_(-2.9683309167523389772660608703858297e-6) }, { SC_(12), SC_(15.00000), SC_(-4.4822030612790888239848346241379762e-7) }, { SC_(12), SC_(17.12500), SC_(-8.7479493941258027953346726543995677e-8) }, { SC_(12), SC_(19.25000), SC_(-2.0757514198487629655709801633624060e-8) }, { SC_(12), SC_(21.37500), SC_(-5.7438353740388980670397346200747331e-9) }, { SC_(12), SC_(23.50000), SC_(-1.7993432749405246733914335090978470e-9) }, { SC_(12), SC_(25.62500), SC_(-6.2435444143873592979499739047338207e-10) }, { SC_(12), SC_(27.75000), SC_(-2.3603187097640550778749196581740161e-10) }, { SC_(12), SC_(29.87500), SC_(-9.5975541975412793814120279791068637e-11) }, { SC_(12), SC_(32.00000), SC_(-4.1552035282000578511439617844316334e-11) }, { SC_(12), SC_(34.12500), SC_(-1.8998432787826251814581286958206123e-11) }, { SC_(12), SC_(36.25000), SC_(-9.1125382347537588010833133716666482e-12) }, { SC_(12), SC_(38.37500), SC_(-4.5599501480319696078145812150042737e-12) }, { SC_(12), SC_(40.50000), SC_(-2.3695979124099134723655912747303232e-12) }, { SC_(12), SC_(42.62500), SC_(-1.2737626539048915719376237689570656e-12) }, { SC_(12), SC_(44.75000), SC_(-7.0592220046106837677774762353832582e-13) }, { SC_(12), SC_(46.87500), SC_(-4.0219605264396476495155503895759108e-13) }, { SC_(12), SC_(49.00000), SC_(-2.3499370395545407582624144041709511e-13) }, { SC_(12), SC_(51.12500), SC_(-1.4049959061173089543038862427082956e-13) }, { SC_(12), SC_(53.25000), SC_(-8.5797116983505159074486972598899288e-14) }, { SC_(12), SC_(55.37500), SC_(-5.3422568073471069670219359482696794e-14) }, { SC_(12), SC_(57.50000), SC_(-3.3867985175935679891876577636637264e-14) }, { SC_(12), SC_(59.62500), SC_(-2.1832074877153446073077836903455745e-14) }, { SC_(12), SC_(61.75000), SC_(-1.4293240909063248751348970309438269e-14) }, { SC_(12), SC_(63.87500), SC_(-9.4937480883301538244379833116307891e-15) }, { SC_(12), SC_(66.00000), SC_(-6.3914967852421984438071853365851405e-15) }, { SC_(12), SC_(68.12500), SC_(-4.3576413857619763879519099830883388e-15) }, { SC_(12), SC_(70.25000), SC_(-3.0063897012087057369199810835484853e-15) }, { SC_(12), SC_(72.37500), SC_(-2.0973711510201259912443465435969711e-15) }, { SC_(12), SC_(74.50000), SC_(-1.4786311290892013378232248983192765e-15) }, { SC_(12), SC_(76.62500), SC_(-1.0527885762581410791135439292370286e-15) }, { SC_(12), SC_(78.75000), SC_(-7.5662859409010038912157660753875556e-16) }, { SC_(12), SC_(80.87500), SC_(-5.4861427907366815368388985862444385e-16) }, { SC_(12), SC_(83.00000), SC_(-4.0113795601837316346341436637916290e-16) }, { SC_(12), SC_(85.12500), SC_(-2.9564974628089487210535317533851159e-16) }, { SC_(12), SC_(87.25000), SC_(-2.1955682892705039626630737602169576e-16) }, { SC_(12), SC_(89.37500), SC_(-1.6422644673043790572542870203840550e-16) }, { SC_(12), SC_(91.50000), SC_(-1.2368534305097629421391380808602245e-16) }, { SC_(12), SC_(93.62500), SC_(-9.3763732289494543868014071205929613e-17) }, { SC_(12), SC_(95.75000), SC_(-7.1526151114554258090139227356676697e-17) }, { SC_(12), SC_(97.87500), SC_(-5.4889394969371742548386275256109609e-17) }, { SC_(12), SC_(100.0000), SC_(-4.2363681689608104413899863907775333e-17) }, + { SC_(21), SC_(0.1250000), SC_(3.7698461389048740847200205590867822e39) }, { SC_(21), SC_(2.250000), SC_(9.1298158507949915159597719407312508e11) }, { SC_(21), SC_(4.375000), SC_(408886.47063811418290988174462904689) }, { SC_(21), SC_(6.500000), SC_(69.783498668647519157069128850360732) }, { SC_(21), SC_(8.625000), SC_(0.14574011463957290617412866498392900) }, { SC_(21), SC_(10.75000), SC_(0.0012181648740805635977027563578320036) }, { SC_(21), SC_(12.87500), SC_(0.000024558760763169978336155197432207549) }, { SC_(21), SC_(15.00000), SC_(9.0946144696294632279197453808024020e-7) }, { SC_(21), SC_(17.12500), SC_(5.2548180764045016519118256734019257e-8) }, { SC_(21), SC_(19.25000), SC_(4.2632373548174335144878212855377856e-9) }, { SC_(21), SC_(21.37500), SC_(4.5191821412507380972584044138294203e-10) }, { SC_(21), SC_(23.50000), SC_(5.9459999472668271337052481421711044e-11) }, { SC_(21), SC_(25.62500), SC_(9.3494613148584596286144185433362367e-12) }, { SC_(21), SC_(27.75000), SC_(1.7071269974977763414024284983419274e-12) }, { SC_(21), SC_(29.87500), SC_(3.5397471216602229335658443914126577e-13) }, { SC_(21), SC_(32.00000), SC_(8.1890165923201938880286772740175496e-14) }, { SC_(21), SC_(34.12500), SC_(2.0838387642645373192280813068168954e-14) }, { SC_(21), SC_(36.25000), SC_(5.7652633708208411748169589666923627e-15) }, { SC_(21), SC_(38.37500), SC_(1.7175814132832512497760866952875142e-15) }, { SC_(21), SC_(40.50000), SC_(5.4658871187824521586899247607212215e-16) }, { SC_(21), SC_(42.62500), SC_(1.8454073409395762586978128093893739e-16) }, { SC_(21), SC_(44.75000), SC_(6.5718894398363114531765518843039215e-17) }, { SC_(21), SC_(46.87500), SC_(2.4563292426503881973678226160508883e-17) }, { SC_(21), SC_(49.00000), SC_(9.5940884241955097871390055431773988e-18) }, { SC_(21), SC_(51.12500), SC_(3.9012613551839347983144664217896505e-18) }, { SC_(21), SC_(53.25000), SC_(1.6460967024588312755378806948280578e-18) }, { SC_(21), SC_(55.37500), SC_(7.1860306265059509271853406338496567e-19) }, { SC_(21), SC_(57.50000), SC_(3.2373123407072660945448849676538922e-19) }, { SC_(21), SC_(59.62500), SC_(1.5015620637437584782988688648328655e-19) }, { SC_(21), SC_(61.75000), SC_(7.1560282337372458319334209159595311e-20) }, { SC_(21), SC_(63.87500), SC_(3.4975910507684158405937390693690592e-20) }, { SC_(21), SC_(66.00000), SC_(1.7502964214288619731071110181806997e-20) }, { SC_(21), SC_(68.12500), SC_(8.9546013195046736291336879943433535e-21) }, { SC_(21), SC_(70.25000), SC_(4.6771364193808931649132626805767700e-21) }, { SC_(21), SC_(72.37500), SC_(2.4909977030434827195554109631354701e-21) }, { SC_(21), SC_(74.50000), SC_(1.3512434774057027230504407213596735e-21) }, { SC_(21), SC_(76.62500), SC_(7.4577901408689598214597184764730976e-22) }, { SC_(21), SC_(78.75000), SC_(4.1839783582393157943543388920119532e-22) }, { SC_(21), SC_(80.87500), SC_(2.3839167824682948660923670294251560e-22) }, { SC_(21), SC_(83.00000), SC_(1.3783660126553262954802012537509343e-22) }, { SC_(21), SC_(85.12500), SC_(8.0813880329362090238603817798156305e-23) }, { SC_(21), SC_(87.25000), SC_(4.8012632134261346749651412145722164e-23) }, { SC_(21), SC_(89.37500), SC_(2.8886517006206031302171279370237901e-23) }, { SC_(21), SC_(91.50000), SC_(1.7589221011224124901492492436031577e-23) }, { SC_(21), SC_(93.62500), SC_(1.0833513342557474766046276358625049e-23) }, { SC_(21), SC_(95.75000), SC_(6.7458879620191471687975317800222219e-24) }, { SC_(21), SC_(97.87500), SC_(4.2446964227424748308143188339893397e-24) }, { SC_(21), SC_(100.0000), SC_(2.6977147877389616650544376447910561e-24) }, + { SC_(30), SC_(0.1250000), SC_(-2.6269370855717061268373196091559060e60) }, { SC_(30), SC_(2.250000), SC_(-3.2063201132225624894497621128724710e21) }, { SC_(30), SC_(4.375000), SC_(-3.5816122065666942298125086110013811e12) }, { SC_(30), SC_(6.500000), SC_(-1.6926495147567915305098150929608351e7) }, { SC_(30), SC_(8.625000), SC_(-2691.9893080722988179729741180559768) }, { SC_(30), SC_(10.75000), SC_(-3.0129827880548721952335149662772758) }, { SC_(30), SC_(12.87500), SC_(-0.011679541591944513522798667560485778) }, { SC_(30), SC_(15.00000), SC_(-0.00010699799160744992062995477402482814) }, { SC_(30), SC_(17.12500), SC_(-1.8412916811312822615145612742242341e-6) }, { SC_(30), SC_(19.25000), SC_(-5.1296809753659048984675389168991678e-8) }, { SC_(30), SC_(21.37500), SC_(-2.0897092756900426602247473552496515e-9) }, { SC_(30), SC_(23.50000), SC_(-1.1575741931670926101304469613657363e-10) }, { SC_(30), SC_(25.62500), SC_(-8.2634766034599236789755939810493909e-12) }, { SC_(30), SC_(27.75000), SC_(-7.2982420192371959627923444899651880e-13) }, { SC_(30), SC_(29.87500), SC_(-7.7259330615365968247618603604357394e-14) }, { SC_(30), SC_(32.00000), SC_(-9.5598830564651701596127591449043084e-15) }, { SC_(30), SC_(34.12500), SC_(-1.3549801683291963236022185422404195e-15) }, { SC_(30), SC_(36.25000), SC_(-2.1637420158752325246771018243486794e-16) }, { SC_(30), SC_(38.37500), SC_(-3.8399012944498044530335003629202925e-17) }, { SC_(30), SC_(40.50000), SC_(-7.4867790463777103523228388855693400e-18) }, { SC_(30), SC_(42.62500), SC_(-1.5882468053156791511681017429675896e-18) }, { SC_(30), SC_(44.75000), SC_(-3.6357619494056634364065401737558109e-19) }, { SC_(30), SC_(46.87500), SC_(-8.9173782150303341835362824820507660e-20) }, { SC_(30), SC_(49.00000), SC_(-2.3289849068324860513642836089935388e-20) }, { SC_(30), SC_(51.12500), SC_(-6.4424396179339080523684393804219419e-21) }, { SC_(30), SC_(53.25000), SC_(-1.8786312072016996388558435362347671e-21) }, { SC_(30), SC_(55.37500), SC_(-5.7508919690939180263189604207862429e-22) }, { SC_(30), SC_(57.50000), SC_(-1.8413295011736722141223685570224223e-22) }, { SC_(30), SC_(59.62500), SC_(-6.1461867250080302453576793713083061e-23) }, { SC_(30), SC_(61.75000), SC_(-2.1324740914631425269500808021967305e-23) }, { SC_(30), SC_(63.87500), SC_(-7.6704605421877601246419439338550908e-24) }, { SC_(30), SC_(66.00000), SC_(-2.8535639781622817027659809125071790e-24) }, { SC_(30), SC_(68.12500), SC_(-1.0955940788660649214956488504913491e-24) }, { SC_(30), SC_(70.25000), SC_(-4.3327278415671627426087404900842932e-25) }, { SC_(30), SC_(72.37500), SC_(-1.7617839186667213519985857533371320e-25) }, { SC_(30), SC_(74.50000), SC_(-7.3539453800410337613851853725254145e-26) }, { SC_(30), SC_(76.62500), SC_(-3.1464535209737263958150922875079198e-26) }, { SC_(30), SC_(78.75000), SC_(-1.3780503803711969857070836997294630e-26) }, { SC_(30), SC_(80.87500), SC_(-6.1703357256500029511495096803651889e-27) }, { SC_(30), SC_(83.00000), SC_(-2.8213173028841107933813502855693772e-27) }, { SC_(30), SC_(85.12500), SC_(-1.3159280846978733546278731706334709e-27) }, { SC_(30), SC_(87.25000), SC_(-6.2549157954995389707945629132366569e-28) }, { SC_(30), SC_(89.37500), SC_(-3.0270730786291364371674711274018267e-28) }, { SC_(30), SC_(91.50000), SC_(-1.4902791126813033033236323354658204e-28) }, { SC_(30), SC_(93.62500), SC_(-7.4578261147126651898615763642561310e-29) }, { SC_(30), SC_(95.75000), SC_(-3.7908508349033587121694154134344755e-29) }, { SC_(30), SC_(97.87500), SC_(-1.9558790071355202604313002586790408e-29) }, { SC_(30), SC_(100.0000), SC_(-1.0236429687189538253202730650097974e-29) } + }}; + + do_test_polygamma(data, name, "Mathematica Data"); + + boost::array, 284> big_data = + { { + { 1, 2.0000000000000000000000000000000000, 0.64493406684822643647241516664602519 }, { 1, 4.0000000000000000000000000000000000, 0.28382295573711532536130405553491408 }, { 1, 8.0000000000000000000000000000000000, 0.13313701469403142513454668592040161 }, { 1, 16.000000000000000000000000000000000, 0.064493783403239361781710772311927225 }, { 1, 32.000000000000000000000000000000000, 0.031743366520302090126581680438741427 }, { 1, 64.000000000000000000000000000000000, 0.015747706064338930155744003071350465 }, { 1, 128.00000000000000000000000000000000, 0.0078430970500146151295391657680446584 }, { 1, 256.00000000000000000000000000000000, 0.0039138893286083964054615299292933721 }, { 1, 512.00000000000000000000000000000000, 0.0019550335903952979329050939908745913 }, { 1, 1024.0000000000000000000000000000000, 0.00097703949237860262165259669085763056 }, + { 1, 2048.0000000000000000000000000000000, 0.00048840047869210349388677277938304048 }, { 1, 4096.0000000000000000000000000000000, 0.00024417042974770687112825193241674713 }, { 1, 8192.0000000000000000000000000000000, 0.00012207776338376182351559927851701587 }, { 1, 16384.000000000000000000000000000000, 0.000061037018933044843502668828413112893 }, { 1, 32768.000000000000000000000000000000, 0.000030518043791024259310109487753004549 }, + { 2, 2.0000000000000000000000000000000000, -0.40411380631918857079947632302289998 }, { 2, 4.0000000000000000000000000000000000, -0.080039732245114496725402248948825907 }, { 2, 8.0000000000000000000000000000000000, -0.017699569195767773909291677736213879 }, { 2, 16.000000000000000000000000000000000, -0.0041580101239589621541865297842265262 }, { 2, 32.000000000000000000000000000000000, -0.0010075567602140907392185110593117265 }, { 2, 64.000000000000000000000000000000000, -0.00024798512216328534949893202341675581 }, { 2, 128.00000000000000000000000000000000, -0.000061513856015459056093727063597403146 }, { 2, 256.00000000000000000000000000000000, -0.000015318510122005107648117663349723503 }, { 2, 512.00000000000000000000000000000000, -3.8221551221702861883051574825692679e-6 }, { 2, 1024.0000000000000000000000000000000, -9.5460609372807180482794242236285690e-7 }, { 2, 2048.0000000000000000000000000000000, -2.3853502284509660646447307719091929e-7 }, { 2, 4096.0000000000000000000000000000000, -5.9619198466975795959019740002484769e-8 }, { 2, 8192.0000000000000000000000000000000, -1.4902980294273504017537750635770593e-8 }, { 2, 16384.000000000000000000000000000000, -3.7255176790762511898502424554181168e-9 }, { 2, 32768.000000000000000000000000000000, -9.3135099675858978849200435754135096e-10 }, { 2, 65536.000000000000000000000000000000, -2.3283419639465348371721333739142464e-10 }, { 2, 131072.00000000000000000000000000000, -5.8208105004371323183654400926421586e-11 }, { 2, 262144.00000000000000000000000000000, -1.4551970739623962182873920142648449e-11 }, { 2, 524288.00000000000000000000000000000, -3.6379857459922343037889500943887953e-12 }, { 2, 1.0485760000000000000000000000000000e6, -9.0949556913507981662486265691361231e-13 }, { 2, 2.0971520000000000000000000000000000e6, -2.2737378386347515742334544652596257e-13 }, { 2, 4.1943040000000000000000000000000000e6, -5.6843432413336786525629259100975662e-14 }, { 2, 8.3886080000000000000000000000000000e6, -1.4210856409267999200219031777240284e-14 }, { 2, 1.6777216000000000000000000000000000e7, -3.5527138905587440538179478730582199e-15 }, { 2, 3.3554432000000000000000000000000000e7, -8.8817844616990522846624354086352033e-16 }, { 2, 6.7108864000000000000000000000000000e7, -2.2204460823375378294874032126041593e-16 }, { 2, 1.3421772800000000000000000000000000e8, -5.5511151644848134838439376350034016e-17 }, { 2, 2.6843545600000000000000000000000000e8, -1.3877787859513245136156122749960089e-17 }, { 2, 5.3687091200000000000000000000000000e8, -3.4694469584159627304129087489268059e-18 }, { 2, 1.0737418240000000000000000000000000e9, -8.6736173879619711452843652170069542e-19 }, { 2, 2.1474836480000000000000000000000000e9, -2.1684043459807508269328995828313535e-19 }, { 2, 4.2949672960000000000000000000000000e9, -5.4210108636896996185378196868612602e-20 }, { 2, 8.5899345920000000000000000000000000e9, -1.3552527157646527235627019117855720e-20 }, { 2, 1.7179869184000000000000000000000000e10, -3.3881317892144165825842826725813744e-21 }, { 2, 3.4359738368000000000000000000000000e10, -8.4703294727895224235683785200562563e-22 }, { 2, 6.8719476736000000000000000000000000e10, -2.1175823681665657267812262331022925e-22 }, { 2, 1.3743895347200000000000000000000000e11, -5.2939559203778957180649004761553143e-23 }, { 2, 2.7487790694400000000000000000000000e11, -1.3234889800896591046552307550599825e-23 }, { 2, 5.4975581388800000000000000000000000e11, -3.3087224502181292305618503541427776e-24 }, { 2, 1.0995116277760000000000000000000000e12, -8.2718061255377999125593529818894574e-25 }, { 2, 2.1990232555520000000000000000000000e12, -2.0679515313835095826591797740024589e-25 }, { 2, 4.3980465111040000000000000000000000e12, -5.1698788284575984622971267465834721e-26 }, { 2, 8.7960930222080000000000000000000000e12, -1.2924697071142526787804288756502028e-26 }, { 2, 1.7592186044416000000000000000000000e13, -3.2311742677854480259587561910416561e-27 }, { 2, 3.5184372088832000000000000000000000e13, -8.0779356694633904761564954897872834e-28 }, { 2, 7.0368744177664000000000000000000000e13, -2.0194839173658189204465744995814610e-28 }, { 2, 1.4073748835532800000000000000000000e14, -5.0487097934145114278757495332542949e-29 }, { 2, 2.8147497671065600000000000000000000e14, -1.2621774483536233728138515438750504e-29 }, { 2, 5.6294995342131200000000000000000000e14, -3.1554436208840528268407715604044070e-30 }, { 2, 1.1258999068426240000000000000000000e15, -7.8886090522101250606096072769163284e-31 }, { 2, 2.2517998136852480000000000000000000e15, -1.9721522630525303893408616162178294e-31 }, { 2, 4.5035996273704960000000000000000000e15, -4.9303806576313248785877287867808721e-32 }, { 2, 9.0071992547409920000000000000000000e15, -1.2325951644078310828013790399747782e-32 }, { 2, 1.8014398509481984000000000000000000e16, -3.0814879110195775359465061540364098e-33 }, { 2, 3.6028797018963968000000000000000000e16, -7.7037197775489436260450885777153639e-34 }, { 2, 7.2057594037927936000000000000000000e16, -1.9259299443872358797836250435068840e-34 }, { 2, 1.4411518807585587200000000000000000e17, -4.8148248609680896660495037326147640e-35 }, { 2, 2.8823037615171174400000000000000000e17, -1.2037062152420224123361810736346353e-35 }, { 2, 5.7646075230342348800000000000000000e17, -3.0092655381050560256202091096877686e-36 }, { 2, 1.1529215046068469760000000000000000e18, -7.5231638452626400575252183062208969e-37 }, { 2, 2.3058430092136939520000000000000000e18, -1.8807909613156600135656415180554087e-37 }, { 2, 4.6116860184273879040000000000000000e18, -4.7019774032891500328945249720137522e-38 }, { 2, 9.2233720368547758080000000000000000e18, -1.1754943508222875080961838901128419e-38 }, { 2, 1.8446744073709551616000000000000000e19, -2.9387358770557187700811505341688594e-39 }, { 2, 3.6893488147419103232000000000000000e19, -7.3468396926392969250037398465305920e-40 }, { 2, 7.3786976294838206464000000000000000e19, -1.8367099231598242312260429005212034e-40 }, { 2, 1.4757395258967641292800000000000000e20, -4.5917748078995605780339921749137029e-41 }, { 2, 2.9514790517935282585600000000000000e20, -1.1479437019748901445046086591797625e-41 }, { 2, 5.9029581035870565171200000000000000e20, -2.8698592549372253612566599172635773e-42 }, { 2, 1.1805916207174113034240000000000000e21, -7.1746481373430634031355726298016569e-43 }, { 2, 2.3611832414348226068480000000000000e21, -1.7936620343357658507831335120307534e-43 }, { 2, 4.7223664828696452136960000000000000e21, -4.4841550858394146269568842233023076e-44 }, { 2, 9.4447329657392904273920000000000000e21, -1.1210387714598536567391023612287549e-44 }, { 2, 1.8889465931478580854784000000000000e22, -2.8025969286496341418476075348258598e-45 }, { 2, 3.7778931862957161709568000000000000e22, -7.0064923216240853546188333767571150e-46 }, { 2, 7.5557863725914323419136000000000000e22, -1.7516230804060213386546851616508370e-46 }, { 2, 1.5111572745182864683827200000000000e23, -4.3790577010150533466366839259540402e-47 }, { 2, 3.0223145490365729367654400000000000e23, -1.0947644252537633366591673592168785e-47 }, { 2, 6.0446290980731458735308800000000000e23, -2.7369110631344083416479138702026569e-48 }, { 2, 1.2089258196146291747061760000000000e24, -6.8422776578360208541197790157072179e-49 }, { 2, 2.4178516392292583494123520000000000e24, -1.7105694144590052135299440464518764e-49 }, { 2, 4.8357032784585166988247040000000000e24, -4.2764235361475130338248592317860310e-50 }, { 2, 9.6714065569170333976494080000000000e24, -1.0691058840368782584562146974035503e-50 }, { 2, 1.9342813113834066795298816000000000e25, -2.6727647100921956461405366053301788e-51 }, { 2, 3.8685626227668133590597632000000000e25, -6.6819117752304891153513413406020758e-52 }, { 2, 7.7371252455336267181195264000000000e25, -1.6704779438076222788378353135600976e-52 }, { 2, 1.5474250491067253436239052800000000e26, -4.1761948595190556970945882569122172e-53 }, { 2, 3.0948500982134506872478105600000000e26, -1.0440487148797639242736470608545510e-53 }, { 2, 6.1897001964269013744956211200000000e26, -2.6101217871994098106841176479194982e-54 }, { 2, 1.2379400392853802748991242240000000e27, -6.5253044679985245267102941145276465e-55 }, { 2, 2.4758800785707605497982484480000000e27, -1.6313261169996311316775735279730243e-55 }, { 2, 4.9517601571415210995964968960000000e27, -4.0783152924990778291939338191089514e-56 }, { 2, 9.9035203142830421991929937920000000e27, -1.0195788231247694572984834546742867e-56 }, { 2, 1.9807040628566084398385987584000000e28, -2.5489470578119236432462086365570278e-57 }, { 2, 3.9614081257132168796771975168000000e28, -6.3723676445298091081155215912317084e-58 }, { 2, 7.9228162514264337593543950336000000e28, -1.5930919111324522770288803977878195e-58 }, { 2, 1.5845632502852867518708790067200000e29, -3.9827297778311306925722009944444141e-59 }, { 2, 3.1691265005705735037417580134400000e29, -9.9568244445778267314305024860796170e-60 }, { 2, 6.3382530011411470074835160268800000e29, -2.4892061111444566828576256215159770e-60 }, { 2, 1.2676506002282294014967032053760000e30, -6.2230152778611417071440640537850333e-61 }, + { 4, 2.0000000000000000000000000000000000, -0.88626612344087823195277167496882003}, { 4, 4.0000000000000000000000000000000000, -0.037500691342112799854006242870054601 }, { 4, 8.0000000000000000000000000000000000, -0.0018687951506376135155684814141062787 }, { 4, 16.000000000000000000000000000000000, -0.00010359125360358782747907937474060894 }, { 4, 32.000000000000000000000000000000000, -6.0889806370027137702207132674152980e-6 }, { 4, 64.000000000000000000000000000000000, -3.6894923384141876864824136311646410e-7 }, { 4, 128.00000000000000000000000000000000, -2.2703261395872369173970078168917455e-8 }, { 4, 256.00000000000000000000000000000000, -1.4079333251018200826827045864949986e-9 }, { 4, 512.00000000000000000000000000000000, -8.7653106993395973543058191653743071e-11 }, { 4, 1024.0000000000000000000000000000000, -5.4676350252855605594922081412167012e-12 }, { 4, 2048.0000000000000000000000000000000, -3.4139371559748457865769094969096427e-13 }, { 4, 4096.0000000000000000000000000000000, -2.1326692531241146202038690286850691e-14 }, { 4, 8192.0000000000000000000000000000000, -1.3325929232891576568330300144201981e-15 }, { 4, 16384.000000000000000000000000000000, -8.3276891759241673633332539309962691e-17 }, { 4, 32768.000000000000000000000000000000, -5.2044880733635773100598702692535183e-18 }, { 4, 65536.000000000000000000000000000000, -3.2527057803921971134912503489998463e-19 }, { 4, 131072.00000000000000000000000000000, -2.0329100928805067785989990248970031e-20 }, { 4, 262144.00000000000000000000000000000, -1.2705591144350687435054305331329679e-21 }, { 4, 524288.00000000000000000000000000000, -7.9409641728159744142284095369593220e-23 }, { 4, 1.0485760000000000000000000000000000e6, -4.9630931416565518652153749436192000e-24 }, { 4, 2.0971520000000000000000000000000000e6, -3.1019302553034238539128749896589195e-25 }, { 4, 4.1943040000000000000000000000000000e6, -1.9387054851177155898453895640231670e-26 }, { 4, 8.3886080000000000000000000000000000e6, -1.2116906393089944897903424066391815e-27 }, { 4, 1.6777216000000000000000000000000000e7, -7.5730655929014196050202587407391615e-29 }, { 4, 3.3554432000000000000000000000000000e7, -4.7331657134447220363116949282744848e-30 }, { 4, 6.7108864000000000000000000000000000e7, -2.9582284827408716767299704712288552e-31 }, { 4, 1.3421772800000000000000000000000000e8, -1.8488927741623954373880437387993075e-32 }, { 4, 2.6843545600000000000000000000000000e8, -1.1555579752419193033729099502283072e-33 }, { 4, 5.3687091200000000000000000000000000e8, -7.2222373183570650057583536416196423e-35 }, { 4, 1.0737418240000000000000000000000000e9, -4.5138983155653748230741551964743254e-36 }, { 4, 2.1474836480000000000000000000000000e9, -2.8211864446009246407535785204401521e-37 }, { 4, 4.2949672960000000000000000000000000e9, -1.7632415270545045810527364994409865e-38 }, { 4, 8.5899345920000000000000000000000000e9, -1.1020259541524799509144333467867914e-39 }, { 4, 1.7179869184000000000000000000000000e10, -6.8876622126511702800708681871153888e-41 }, { 4, 3.4359738368000000000000000000000000e10, -4.3047888826564097334549177850495839e-42 }, { 4, 6.8719476736000000000000000000000000e10, -2.6904930515819524297904926510117385e-43 }, { 4, 1.3743895347200000000000000000000000e11, -1.6815581572142503768636183351690905e-44 }, { 4, 2.7487790694400000000000000000000000e11, -1.0509738482512596443662561409356175e-45 }, { 4, 5.4975581388800000000000000000000000e11, -6.5685865515464763986220054285432304e-47 }, { 4, 1.0995116277760000000000000000000000e12, -4.1053665947090801308053030433926733e-48 }, { 4, 2.1990232555520000000000000000000000e12, -2.5658541216908414510241138209492617e-49 }, { 4, 4.3980465111040000000000000000000000e12, -1.6036588260560466472871963710133920e-50 }, { 4, 8.7960930222080000000000000000000000e12, -1.0022867662848012609285994319421665e-51 }, { 4, 1.7592186044416000000000000000000000e13, -6.2642922892792957132228143635273796e-53 }, { 4, 3.5184372088832000000000000000000000e13, -3.9151826807993372683952177161081714e-54 }, { 4, 7.0368744177664000000000000000000000e13, -2.4469891754995162451316856809457970e-55 }, { 4, 1.4073748835532800000000000000000000e14, -1.5293682346871759195775143660953743e-56 }, { 4, 2.8147497671065600000000000000000000e14, -9.5585514667947815797663735871501036e-58 }, { 4, 5.6294995342131200000000000000000000e14, -5.9740946667467172631061424917674488e-59 }, { 4, 1.1258999068426240000000000000000000e15, -3.7338091667166916568638887448064559e-60 }, + { 5, 2.0000000000000000000000000000000000, 2.0811674381338967657421515749104633 }, { 5, 4.0000000000000000000000000000000000, 0.041558384635954378910875854745854295 }, { 5, 8.0000000000000000000000000000000000, 0.00098951000477133869852907040195234770 }, { 5, 16.000000000000000000000000000000000, 0.000026687171525751195904263272526023849 }, { 5, 32.000000000000000000000000000000000, 7.7287973331327549424848375559872037e-7 }, { 5, 64.000000000000000000000000000000000, 2.3238496018000614929174818530730601e-8 }, { 5, 128.00000000000000000000000000000000, 7.1224092682782859288630591196158856e-10 }, { 5, 256.00000000000000000000000000000000, 2.2041868318688703092956583673488732e-11 }, { 5, 512.00000000000000000000000000000000, 6.8545820059344569325690341822051481e-13 }, + { 5, 1024.0000000000000000000000000000000, 2.1368374599013908699681782557176684e-14 }, { 5, 2048.0000000000000000000000000000000, 6.6694736345106372565672272296621720e-16 }, { 5, 4096.0000000000000000000000000000000, 2.0829390307857624148581922800405889e-17 }, { 5, 8192.0000000000000000000000000000000, 6.5071985107212205839819397506176587e-19 }, { 5, 16384.000000000000000000000000000000, 2.0331892850726898586186509892109697e-20 }, + { 30, 2.0000000000000000000000000000000000, -1.2351841765847806469554512503841320e23 }, { 30, 4.0000000000000000000000000000000000, -5.7574709672867347088590035301645472e13 }, { 30, 8.0000000000000000000000000000000000, -27506.955293920803735428099734719508 }, { 30, 16.000000000000000000000000000000000, -0.000014776733178819597558222752004691771 }, { 30, 32.000000000000000000000000000000000, -9.5598830564651701596127591449043084e-15 }, { 30, 64.000000000000000000000000000000000, -7.2304485310918134795078579958346544e-24 }, { 30, 128.00000000000000000000000000000000, -6.0283544055510492723170660715813893e-33 }, { 30, 256.00000000000000000000000000000000, -5.3033945300844267682288152122688373e-42 }, { 30, 512.00000000000000000000000000000000, -4.7984984493788567623415259200478215e-51 }, { 30, 1024.0000000000000000000000000000000, -4.4044059984515492135344714328158802e-60 }, { 30, 2048.0000000000000000000000000000000, -4.0720911710023652995468796384464697e-69 }, { 30, 4096.0000000000000000000000000000000, -3.7785912001586472052142107275635729e-78 }, { 30, 8192.0000000000000000000000000000000, -3.5126550370582447330888831842922732e-87 }, { 30, 16384.000000000000000000000000000000, -3.2684225122971143182856602549511625e-96 }, { 30, 32768.000000000000000000000000000000, -3.0425628731892016567765116031607680e-105 }, { 30, 65536.000000000000000000000000000000, -2.8329590706806369266402498060974102e-114 }, { 30, 131072.00000000000000000000000000000, -2.6380968281136772828042603723998837e-123 }, { 30, 262144.00000000000000000000000000000, -2.4567785517794442581328674255623958e-132 }, { 30, 524288.00000000000000000000000000000, -2.2879878661829847442965875847125058e-141 }, { 30, 1.0485760000000000000000000000000000e6, -2.1308242685223148657953902073871316e-150 }, { 30, 2.0971520000000000000000000000000000e6, -1.9844705497704998113296263703338786e-159 }, { 30, 4.1943040000000000000000000000000000e6, -1.8481756120690176942737056133829355e-168 }, { 30, 8.3886080000000000000000000000000000e6, -1.7212445915482984340950265207437808e-177 }, { 30, 1.6777216000000000000000000000000000e7, -1.6030325113209352859611074788378703e-186 }, { 30, 3.3554432000000000000000000000000000e7, -1.4929396982396668313427669448409354e-195 }, { 30, 6.7108864000000000000000000000000000e7, -1.3904081327297841105213325845203069e-204 }, { 30, 1.3421772800000000000000000000000000e8, -1.2949183372218004102189189609880637e-213 }, { 30, 2.6843545600000000000000000000000000e8, -1.2059866123484480516357481544084177e-222 }, { 30, 5.3687091200000000000000000000000000e8, -1.1231625253833571996113692012033249e-231 }, { 30, 1.0737418240000000000000000000000000e9, -1.0460266002388281642669220414065145e-240 }, { 30, 2.1474836480000000000000000000000000e9, -9.7418817964607553111407834656180990e-250 }, { 30, 4.2949672960000000000000000000000000e9, -9.0728344045929855573515168095233657e-259 }, { 30, 8.5899345920000000000000000000000000e9, -8.4497354819902512502834172688634013e-268 }, { 30, 1.7179869184000000000000000000000000e10, -7.8694293970360059201227925630244920e-277 }, { 30, 3.4359738368000000000000000000000000e10, -7.3289772436027860614787732271106255e-286 }, { 30, 6.8719476736000000000000000000000000e10, -6.8256419543205073368020956733620994e-295 }, { 30, 1.3743895347200000000000000000000000e11, -6.3568744376074160576260336726346352e-304 }, { 30, 2.7487790694400000000000000000000000e11, -5.9203006674167918417546432760193032e-313 }, { 30, 5.4975581388800000000000000000000000e11, -5.5137096599259016840358774274418939e-322 }, { 30, 1.0995116277760000000000000000000000e12, -5.1350422760943708365732963065500637e-331 }, { 30, 2.1990232555520000000000000000000000e12, -4.7823807932989146872399082006693143e-340 }, { 30, 4.3980465111040000000000000000000000e12, -4.4539391931915691818714510320431840e-349 }, { 30, 8.7960930222080000000000000000000000e12, -4.1480541165768856815409742503596800e-358 }, { 30, 1.7592186044416000000000000000000000e13, -3.8631764394914254898921483964257641e-367 }, { 30, 3.5184372088832000000000000000000000e13, -3.5978634278194778773174853574513736e-376 }, { 30, 7.0368744177664000000000000000000000e13, -3.3507714307109927261253979955016489e-385 }, { 30, 1.4073748835532800000000000000000000e14, -3.1206490757974196189832923991915393e-394 }, { 30, 2.8147497671065600000000000000000000e14, -2.9063309317429115226430982195302982e-403 }, { 30, 5.6294995342131200000000000000000000e14, -2.7067316060353387914883678696809847e-412 }, { 30, 1.1258999068426240000000000000000000e15, -2.5208402481258872249902802122831258e-421 }, { 30, 2.2517998136852480000000000000000000e15, -2.3477154300789073415295882015261417e-430 }, { 30, 4.5035996273704960000000000000000000e15, -2.1864803788055661339931292249701424e-439 }, { 30, 9.0071992547409920000000000000000000e15, -2.0363185357354232042765617960742937e-448 }, { 30, 1.8014398509481984000000000000000000e16, -1.8964694214383340521722742474983073e-457 }, { 30, 3.6028797018963968000000000000000000e16, -1.7662247842534755008372178353398608e-466 }, { 30, 7.2057594037927936000000000000000000e16, -1.6449250134206145379392674041454779e-475 }, { 30, 1.4411518807585587200000000000000000e17, -1.5319557985482871222587909400586267e-484 }, { 30, 2.8823037615171174400000000000000000e17, -1.4267450185011020326364788255126534e-493 }, { 30, 5.7646075230342348800000000000000000e17, -1.3287598439502548384585954790099239e-502 }, { 30, 1.1529215046068469760000000000000000e18, -1.2375040389134127843853680088571555e-511 }, { 30, 2.3058430092136939520000000000000000e18, -1.1525154476178928989312989675999669e-520 }, { 30, 4.6116860184273879040000000000000000e18, -1.0733636539596066765325327508232535e-529 }, { 30, 9.2233720368547758080000000000000000e18, -9.9964780170433844885501818972479211e-539 }, { 30, 1.8446744073709551616000000000000000e19, -9.3099456439198781553856371993072353e-548 }, { 30, 3.6893488147419103232000000000000000e19, -8.6705625466256198953841239814504762e-557 }, { 30, 7.3786976294838206464000000000000000e19, -8.0750906342879122995040411743125170e-566 }, { 30, 1.4757395258967641292800000000000000e20, -7.5205141997783559362248117439409145e-575 }, { 30, 2.9514790517935282585600000000000000e20, -7.0040246469698435960734303533011581e-584 }, { 30, 5.9029581035870565171200000000000000e20, -6.5230062668862227312246814035998837e-593 }, { 30, 1.1805916207174113034240000000000000e21, -6.0750229907093781336599992450810038e-602 }, { 30, 2.3611832414348226068480000000000000e21, -5.6578060525556822620531601462211155e-611 }, { 30, 4.7223664828696452136960000000000000e21, -5.2692424995411953535258666060047970e-620 }, { 30, 9.4447329657392904273920000000000000e21, -4.9073644909460054277605359114212468e-629 }, { 30, 1.8889465931478580854784000000000000e22, -4.5703393322844108825145652571006034e-638 }, { 30, 3.7778931862957161709568000000000000e22, -4.2564601938095045113123493445833636e-647 }, { 30, 7.5557863725914323419136000000000000e22, -3.9641374664469664090420159863859993e-656 }, { 30, 1.5111572745182864683827200000000000e23, -3.6918907113810688341424078675611601e-665 }, { 30, 3.0223145490365729367654400000000000e23, -3.4383411625223875363750612697898904e-674 }, { 30, 6.0446290980731458735308800000000000e23, -3.2022047438867274079238771888571055e-683 }, { 30, 1.2089258196146291747061760000000000e24, -2.9822855665224859564787125744222496e-692 }, { 30, 2.4178516392292583494123520000000000e24, -2.7774698720523025435197111896762965e-701 }, { 30, 4.8357032784585166988247040000000000e24, -2.5867203921566741015014262629362602e-710 }, { 30, 9.6714065569170333976494080000000000e24, -2.4090710954337139627909495039162813e-719 }, { 30, 1.9342813113834066795298816000000000e25, -2.2436222950310576360588405614024340e-728 }, { 30, 3.8685626227668133590597632000000000e25, -2.0895360922730133273255449640176061e-737 }, { 30, 7.7371252455336267181195264000000000e25, -1.9460321332076688551581879695116458e-746 }, { 30, 1.5474250491067253436239052800000000e26, -1.8123836565834180034307649180969011e-755 }, { 30, 3.0948500982134506872478105600000000e26, -1.6879138132402841033700526042422183e-764 }, { 30, 6.1897001964269013744956211200000000e26, -1.5719922382759713599179429591983936e-773 }, { 30, 1.2379400392853802748991242240000000e27, -1.4640318586267264186571752095136003e-782 }, { 30, 2.4758800785707605497982484480000000e27, -1.3634859198953271085928894585406723e-791 }, { 30, 4.9517601571415210995964968960000000e27, -1.2698452173688701433994709089494920e-800 }, { 30, 9.9035203142830421991929937920000000e27, -1.1826355172031280988822420193126128e-809 }, { 30, 1.9807040628566084398385987584000000e28, -1.1014151547133252945563215933898419e-818 }, { 30, 3.9614081257132168796771975168000000e28, -1.0257727976081197099353387886404875e-827 }, { 30, 7.9228162514264337593543950336000000e28, -9.5532536283891621039746216353614015e-837 }, { 30, 1.5845632502852867518708790067200000e29, -8.8971607651460562869670071028704372e-846 }, { 30, 3.1691265005705735037417580134400000e29, -8.2861266705636459281360796675545348e-855 }, { 30, 6.3382530011411470074835160268800000e29, -7.7170568244193177000955489160105929e-864 }, { 30, 1.2676506002282294014967032053760000e30, -7.1870692301721476950641245729469486e-873 }, + { 31, 2.0000000000000000000000000000000000, 1.9145332544935048093264355986676073e24 }, { 31, 4.0000000000000000000000000000000000, 4.4611518561919816922776795853710092e14 }, { 31, 8.0000000000000000000000000000000000, 106267.95619808419253963903669279065 }, { 31, 16.000000000000000000000000000000000, 0.000028318136062027075392587779376335821 }, { 31, 32.000000000000000000000000000000000, 9.0814734303237413772295578988209818e-15 } + } }; + do_test_polygamma(big_data, name, "Mathematica Data - large arguments"); +} +