From: Stefan Weinzierl Date: Wed, 12 Feb 2014 20:07:40 +0000 (+0200) Subject: G_numeric: fix numeric evaluation with trailing zeros and y != 1. X-Git-Tag: release_1-6-3~14 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=97ef604e;hp=6304288112f2418a2f0a14076363646ec3ce2fa3;ds=sidebyside G_numeric: fix numeric evaluation with trailing zeros and y != 1. Make sure G_numeric makes use of scaling relation (G_do_hoelder) only if there are no traling zeros. Use G_do_trafo otherwise (which can handle trailing zeros). --- diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp index 975a81e6..62c6c62f 100644 --- a/ginac/inifcns_nstdsums.cpp +++ b/ginac/inifcns_nstdsums.cpp @@ -1136,6 +1136,7 @@ G_numeric(const std::vector& x, const std::vector& s, // check for convergence and necessary accelerations bool need_trafo = false; bool need_hoelder = false; + bool have_trailing_zero = false; std::size_t depth = 0; for (std::size_t i = 0; i < x.size(); ++i) { if (!zerop(x[i])) { @@ -1149,14 +1150,16 @@ G_numeric(const std::vector& x, const std::vector& s, need_hoelder = true; } } - if (zerop(x[x.size() - 1])) + if (zerop(x[x.size() - 1])) { + have_trailing_zero = true; need_trafo = true; + } if (depth == 1 && x.size() == 2 && !need_trafo) return - Li_projection(2, y/x[1], cln::float_format(Digits)); // do acceleration transformation (hoelder convolution [BBB]) - if (need_hoelder) + if (need_hoelder && !have_trailing_zero) return G_do_hoelder(x, s, y); // convergence transformation