diff --git a/include/boost/math/special_functions/zeta.hpp b/include/boost/math/special_functions/zeta.hpp index de74d3d05..453e59b87 100644 --- a/include/boost/math/special_functions/zeta.hpp +++ b/include/boost/math/special_functions/zeta.hpp @@ -209,6 +209,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.24339294433593750202L), static_cast(-0.49092470516353571651L), @@ -225,6 +226,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.00024978985622317935355L), static_cast(-0.101855788418564031874e-4L), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, sc) / tools::evaluate_polynomial(Q, sc); result -= 1.2433929443359375F; result += (sc); @@ -234,6 +236,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.577215664901532860516L), static_cast(0.243210646940107164097L), @@ -250,6 +253,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.000255784226140488490982L), static_cast(0.10991819782396112081e-4L), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(-sc)) / tools::evaluate_polynomial(Q, T(-sc)); result += 1 / (-sc); } @@ -257,6 +261,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(-0.0537258300023595030676L), @@ -275,6 +280,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.106951867532057341359e-4L), static_cast(0.236276623974978646399e-7L), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 2)) / tools::evaluate_polynomial(Q, T(s - 2)); result += Y + 1 / (-sc); } @@ -283,7 +289,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(-2.49710190602259410021L), static_cast(-2.60013301809475665334L), @@ -303,6 +309,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.718833729365459760664e-8L), static_cast(-0.1129200113474947419e-9L), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 4)) / tools::evaluate_polynomial(Q, T(s - 4)); result = 1 + exp(result); } @@ -311,6 +318,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(-4.78558028495135619286L), static_cast(-1.89197364881972536382L), @@ -331,6 +339,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(-0.833378440625385520576e-10L), static_cast(0.699841545204845636531e-12L), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 7)) / tools::evaluate_polynomial(Q, T(s - 7)); result = 1 + exp(result); } @@ -338,6 +347,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(-10.3948950573308896825L), static_cast(-2.85827219671106697179L), @@ -358,6 +368,7 @@ inline T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant(0.118507153474022900583e-7L), static_cast(0.222609483627352615142e-14L), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 15)) / tools::evaluate_polynomial(Q, T(s - 15)); result = 1 + exp(result); } @@ -383,6 +394,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& // Maximum Deviation Found: 3.099e-20 // Expected Error Term: 3.099e-20 // Max error found at long double precision: 5.890498e-20 + // LCOV_EXCL_START static const T P[6] = { BOOST_MATH_BIG_CONSTANT(T, 64, 0.243392944335937499969), BOOST_MATH_BIG_CONSTANT(T, 64, -0.496837806864865688082), @@ -400,6 +412,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& BOOST_MATH_BIG_CONSTANT(T, 64, -0.159600883054550987633e-4), BOOST_MATH_BIG_CONSTANT(T, 64, 0.339770279812410586032e-6), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, sc) / tools::evaluate_polynomial(Q, sc); result -= 1.2433929443359375F; result += (sc); @@ -410,7 +423,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& // Maximum Deviation Found: 1.059e-21 // Expected Error Term: 1.059e-21 // Max error found at long double precision: 1.626303e-19 - + // LCOV_EXCL_START static const T P[6] = { BOOST_MATH_BIG_CONSTANT(T, 64, 0.577215664901532860605), BOOST_MATH_BIG_CONSTANT(T, 64, 0.222537368917162139445), @@ -428,6 +441,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& BOOST_MATH_BIG_CONSTANT(T, 64, 0.635994377921861930071e-5), BOOST_MATH_BIG_CONSTANT(T, 64, 0.226583954978371199405e-7), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(-sc)) / tools::evaluate_polynomial(Q, T(-sc)); result += 1 / (-sc); } @@ -435,6 +449,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& { // Maximum Deviation Found: 5.946e-22 // Expected Error Term: -5.946e-22 + // LCOV_EXCL_START static const float Y = 0.6986598968505859375; static const T P[7] = { BOOST_MATH_BIG_CONSTANT(T, 64, -0.053725830002359501027), @@ -455,12 +470,14 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& BOOST_MATH_BIG_CONSTANT(T, 64, 0.278090318191657278204e-6), BOOST_MATH_BIG_CONSTANT(T, 64, -0.19683620233222028478e-8), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 2)) / tools::evaluate_polynomial(Q, T(s - 2)); result += Y + 1 / (-sc); } else if(s <= 7) { // Max error found at long double precision: 8.132216e-19 + // LCOV_EXCL_START static const T P[8] = { BOOST_MATH_BIG_CONSTANT(T, 64, -2.49710190602259407065), BOOST_MATH_BIG_CONSTANT(T, 64, -3.36664913245960625334), @@ -482,6 +499,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& BOOST_MATH_BIG_CONSTANT(T, 64, -0.927884739284359700764e-8), BOOST_MATH_BIG_CONSTANT(T, 64, 0.119810501805618894381e-9), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 4)) / tools::evaluate_polynomial(Q, T(s - 4)); result = 1 + exp(result); } @@ -489,6 +507,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& { // Max error in interpolated form: 1.133e-18 // Max error found at long double precision: 2.183198e-18 + // LCOV_EXCL_START static const T P[9] = { BOOST_MATH_BIG_CONSTANT(T, 64, -4.78558028495135548083), BOOST_MATH_BIG_CONSTANT(T, 64, -3.23873322238609358947), @@ -511,6 +530,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& BOOST_MATH_BIG_CONSTANT(T, 64, 0.117957556472335968146e-7), BOOST_MATH_BIG_CONSTANT(T, 64, -0.193432300973017671137e-12), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 7)) / tools::evaluate_polynomial(Q, T(s - 7)); result = 1 + exp(result); } @@ -518,6 +538,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& { // Max error in interpolated form: 1.668e-17 // Max error found at long double precision: 1.669714e-17 + // LCOV_EXCL_START static const T P[9] = { BOOST_MATH_BIG_CONSTANT(T, 64, -10.3948950573308861781), BOOST_MATH_BIG_CONSTANT(T, 64, -2.82646012777913950108), @@ -541,6 +562,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant& BOOST_MATH_BIG_CONSTANT(T, 64, -0.939798249922234703384e-16), BOOST_MATH_BIG_CONSTANT(T, 64, 0.264584017421245080294e-18), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 15)) / tools::evaluate_polynomial(Q, T(s - 15)); result = 1 + exp(result); } @@ -566,7 +588,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant // Maximum Deviation Found: 9.493e-37 // Expected Error Term: 9.492e-37 // Max error found at long double precision: 7.281332e-31 - + // LCOV_EXCL_START static const T P[10] = { BOOST_MATH_BIG_CONSTANT(T, 113, -1.0), BOOST_MATH_BIG_CONSTANT(T, 113, -0.0353008629988648122808504280990313668), @@ -592,6 +614,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, -0.217062446168217797598596496310953025e-9), BOOST_MATH_BIG_CONSTANT(T, 113, 0.315823200002384492377987848307151168e-11), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, sc) / tools::evaluate_polynomial(Q, sc); result += (sc); result /= (sc); @@ -600,7 +623,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant { // Maximum Deviation Found: 1.616e-37 // Expected Error Term: -1.615e-37 - + // LCOV_EXCL_START static const T P[10] = { BOOST_MATH_BIG_CONSTANT(T, 113, 0.577215664901532860606512090082402431), BOOST_MATH_BIG_CONSTANT(T, 113, 0.255597968739771510415479842335906308), @@ -626,6 +649,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, -0.377105263588822468076813329270698909e-11), BOOST_MATH_BIG_CONSTANT(T, 113, -0.581926559304525152432462127383600681e-13), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(-sc)) / tools::evaluate_polynomial(Q, T(-sc)); result += 1 / (-sc); } @@ -634,7 +658,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant // Maximum Deviation Found: 1.891e-36 // Expected Error Term: -1.891e-36 // Max error found: 2.171527e-35 - + // LCOV_EXCL_START static const float Y = 0.6986598968505859375; static const T P[11] = { BOOST_MATH_BIG_CONSTANT(T, 113, -0.0537258300023595010275848333539748089), @@ -663,6 +687,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, 0.105677416606909614301995218444080615e-11), BOOST_MATH_BIG_CONSTANT(T, 113, 0.547223964564003701979951154093005354e-15), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 2)) / tools::evaluate_polynomial(Q, T(s - 2)); result += Y + 1 / (-sc); } @@ -670,7 +695,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant { // Max error in interpolated form: 1.510e-37 // Max error found at long double precision: 2.769266e-34 - + // LCOV_EXCL_START static const T Y = 3.28348541259765625F; static const T P[13] = { @@ -704,6 +729,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, -0.275363878344548055574209713637734269e-13), BOOST_MATH_BIG_CONSTANT(T, 113, 0.221564186807357535475441900517843892e-15), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 4)) / tools::evaluate_polynomial(Q, T(s - 4)); result -= Y; result = 1 + exp(result); @@ -712,7 +738,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant { // Max error in interpolated form: 1.999e-34 // Max error found at long double precision: 2.156186e-33 - + // LCOV_EXCL_START static const T P[13] = { BOOST_MATH_BIG_CONSTANT(T, 113, -4.0545627381873738086704293881227365), BOOST_MATH_BIG_CONSTANT(T, 113, -4.70088348734699134347906176097717782), @@ -744,6 +770,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, 0.294670713571839023181857795866134957e-16), BOOST_MATH_BIG_CONSTANT(T, 113, -0.147003914536437243143096875069813451e-18), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 6)) / tools::evaluate_polynomial(Q, T(s - 6)); result = 1 + exp(result); } @@ -751,6 +778,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant { // Max error in interpolated form: 1.641e-32 // Max error found at long double precision: 1.696121e-32 + // LCOV_EXCL_START static const T P[13] = { BOOST_MATH_BIG_CONSTANT(T, 113, -6.91319491921722925920883787894829678), BOOST_MATH_BIG_CONSTANT(T, 113, -3.65491257639481960248690596951049048), @@ -782,6 +810,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, 0.887948682401000153828241615760146728e-19), BOOST_MATH_BIG_CONSTANT(T, 113, -0.34980761098820347103967203948619072e-21), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 10)) / tools::evaluate_polynomial(Q, T(s - 10)); result = 1 + exp(result); } @@ -789,7 +818,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant { // Max error in interpolated form: 1.563e-31 // Max error found at long double precision: 1.562725e-31 - + // LCOV_EXCL_START static const T P[13] = { BOOST_MATH_BIG_CONSTANT(T, 113, -11.7824798233959252791987402769438322), BOOST_MATH_BIG_CONSTANT(T, 113, -4.36131215284987731928174218354118102), @@ -821,6 +850,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, -0.291354445847552426900293580511392459e-22), BOOST_MATH_BIG_CONSTANT(T, 113, 0.73614324724785855925025452085443636e-25), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 17)) / tools::evaluate_polynomial(Q, T(s - 17)); result = 1 + exp(result); } @@ -828,6 +858,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant { // Max error in interpolated form: 2.311e-27 // Max error found at long double precision: 2.297544e-27 + // LCOV_EXCL_START static const T P[14] = { BOOST_MATH_BIG_CONSTANT(T, 113, -20.7944102007844314586649688802236072), BOOST_MATH_BIG_CONSTANT(T, 113, -4.95759941987499442499908748130192187), @@ -862,6 +893,7 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant BOOST_MATH_BIG_CONSTANT(T, 113, -0.557103423021951053707162364713587374e-31), BOOST_MATH_BIG_CONSTANT(T, 113, 0.618708773442584843384712258199645166e-34), }; + // LCOV_EXCL_END result = tools::evaluate_polynomial(P, T(s - 30)) / tools::evaluate_polynomial(Q, T(s - 30)); result = 1 + exp(result); } @@ -879,9 +911,11 @@ T zeta_imp_prec(T s, T sc, const Policy&, const std::integral_constant template T zeta_imp_odd_integer(int s, const T&, const Policy&, const std::true_type&) { + // LCOV_EXCL_START static const T results[] = { BOOST_MATH_BIG_CONSTANT(T, 113, 1.2020569031595942853997381615114500), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0369277551433699263313654864570342), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0083492773819228268397975498497968), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0020083928260822144178527692324121), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0004941886041194645587022825264699), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0001227133475784891467518365263574), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000305882363070204935517285106451), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000076371976378997622736002935630), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000019082127165539389256569577951), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000004769329867878064631167196044), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000001192199259653110730677887189), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000298035035146522801860637051), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000074507117898354294919810042), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000018626597235130490064039099), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000004656629065033784072989233), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000001164155017270051977592974), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000291038504449709968692943), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000072759598350574810145209), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000018189896503070659475848), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000004547473783042154026799), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000001136868407680227849349), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000284217097688930185546), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000071054273952108527129), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000017763568435791203275), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000004440892103143813364), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000001110223025141066134), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000277555756213612417), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000069388939045441537), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000017347234760475766), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000004336808690020650), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000001084202172494241), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000271050543122347), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000067762635780452), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000016940658945098), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000004235164736273), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000001058791184068), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000264697796017), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000066174449004), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000016543612251), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000004135903063), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000001033975766), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000258493941), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000064623485), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000016155871), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000004038968), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000001009742), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000252435), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000063109), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000015777), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000003944), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000000986), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000000247), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000000062), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000000015), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000000004), BOOST_MATH_BIG_CONSTANT(T, 113, 1.0000000000000000000000000000000001), }; + // LCOV_EXCL_END return s > 113 ? 1 : results[(s - 3) / 2]; } @@ -891,9 +925,11 @@ T zeta_imp_odd_integer(int s, const T& sc, const Policy& pol, const std::false_t #ifdef BOOST_MATH_NO_THREAD_LOCAL_WITH_NON_TRIVIAL_TYPES static_assert(std::is_trivially_destructible::value, "Your platform does not support thread_local with non-trivial types, last checked with Mingw-x64-8.1, Jan 2021. Please try a Mingw build with the POSIX threading model, see https://sourceforge.net/p/mingw-w64/bugs/527/"); #endif + // LCOV_EXCL_START static BOOST_MATH_THREAD_LOCAL bool is_init = false; static BOOST_MATH_THREAD_LOCAL T results[50] = {}; static BOOST_MATH_THREAD_LOCAL int digits = tools::digits(); + // LCOV_EXCL_END int current_digits = tools::digits(); if(digits != current_digits) {