From: Stefan Weinzierl Date: Tue, 4 Jun 2019 08:21:10 +0000 (+0200) Subject: Fix slow numerical computation of zeta({7,3}). X-Git-Tag: release_1-7-7~10 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=b16d5b34f40c9dcd6bd4f9e1fdeeb65cb1612db3;ds=sidebyside Fix slow numerical computation of zeta({7,3}). The bug was reported by Vitaly Magerya , see . --- diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp index 0a60d780..f040e8ad 100644 --- a/ginac/inifcns_nstdsums.cpp +++ b/ginac/inifcns_nstdsums.cpp @@ -3882,17 +3882,21 @@ static ex zeta1_evalf(const ex& x) const int count = x.nops(); const lst& xlst = ex_to(x); std::vector r(count); + std::vector si(count); // check parameters and convert them auto it1 = xlst.begin(); auto it2 = r.begin(); + auto it_swrite = si.begin(); do { if (!(*it1).info(info_flags::posint)) { return zeta(x).hold(); } *it2 = ex_to(*it1).to_int(); + *it_swrite = 1; it1++; it2++; + it_swrite++; } while (it2 != r.end()); // check for divergence @@ -3900,6 +3904,10 @@ static ex zeta1_evalf(const ex& x) return zeta(x).hold(); } + // use Hoelder convolution if Digits is large + if (Digits>50) + return numeric(zeta_do_Hoelder_convolution(r, si)); + // decide on summation algorithm // this is still a bit clumsy int limit = (Digits>17) ? 10 : 6;