From 97ef604e3da2e918cad6cb10af61f7d07999ed97 Mon Sep 17 00:00:00 2001 From: Stefan Weinzierl Date: Wed, 12 Feb 2014 22:07:40 +0200 Subject: [PATCH 1/1] 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). --- ginac/inifcns_nstdsums.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 -- 2.44.0