X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Finifcns_nstdsums.cpp;h=c6f5012afbab8da2305854cec7094d340b8540a9;hp=66c0542db8bd7f4a4a2098c109d0b4126b11fae3;hb=be11202909f8014b213065ca85272af403a530f1;hpb=ab00a3f70e343eaf5ed242e20bd01da75849bc78 diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp index 66c0542d..c6f5012a 100644 --- a/ginac/inifcns_nstdsums.cpp +++ b/ginac/inifcns_nstdsums.cpp @@ -1013,21 +1013,25 @@ G_do_hoelder(std::vector x, /* yes, it's passed by value */ for (std::size_t i = 0; i < size; ++i) x[i] = x[i]/y; + // 24.03.2021: this block can be outside the loop over r + cln::cl_RA p(2); + bool adjustp; + do { + adjustp = false; + for (std::size_t i = 0; i < size; ++i) { + // 24.03.2021: replaced (x[i] == cln::cl_RA(1)/p) by (cln::zerop(x[i] - cln::cl_RA(1)/p) + // in the case where we compare a float with a rational, CLN behaves differently in the two versions + if (cln::zerop(x[i] - cln::cl_RA(1)/p) ) { + p = p/2 + cln::cl_RA(3)/2; + adjustp = true; + continue; + } + } + } while (adjustp); + cln::cl_RA q = p/(p-1); + for (std::size_t r = 0; r <= size; ++r) { cln::cl_N buffer(1 & r ? -1 : 1); - cln::cl_RA p(2); - bool adjustp; - do { - adjustp = false; - for (std::size_t i = 0; i < size; ++i) { - if (x[i] == cln::cl_RA(1)/p) { - p = p/2 + cln::cl_RA(3)/2; - adjustp = true; - continue; - } - } - } while (adjustp); - cln::cl_RA q = p/(p-1); std::vector qlstx; std::vector qlsts; for (std::size_t j = r; j >= 1; --j) {