X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Finifcns_nstdsums.cpp;h=bd61fd30e984e7941a48a0ffb1d888f018844ce4;hb=2406529f5ceb193a46b1b5a07a8810880a8ceceb;hp=138f5e34431acb0d1b72b1e378a8ee0200d44726;hpb=fb45203612dcfd2e30f6e7a43273597bcd13f026;p=ginac.git diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp index 138f5e34..bd61fd30 100644 --- a/ginac/inifcns_nstdsums.cpp +++ b/ginac/inifcns_nstdsums.cpp @@ -320,7 +320,7 @@ cln::cl_N Lin_do_sum_Xn(int n, const cln::cl_N& x) // forward declaration needed by function Li_projection and C below -numeric S_num(int n, int p, const numeric& x); +const cln::cl_N S_num(int n, int p, const cln::cl_N& x); // helper function for classical polylog Li @@ -371,7 +371,7 @@ cln::cl_N Li_projection(int n, const cln::cl_N& x, const cln::float_format_t& pr } else { cln::cl_N result = -cln::expt(cln::log(x), n-1) * cln::log(1-x) / cln::factorial(n-1); for (int j=0; j(x).to_cl_N(); cln::cl_N result = -cln::expt(cln::log(x_), n-1) * cln::log(1-x_) / cln::factorial(n-1); for (int j=0; j& s, const std::vector=0; k--) { - flag_accidental_zero = cln::zerop(t[k+1]); t[k] = t[k] + t[k+1] * cln::expt(x[k], q+j-1-k) / cln::expt(cln::cl_I(q+j-1-k), s[k]); } q++; @@ -498,7 +497,7 @@ cln::cl_N multipleLi_do_sum(const std::vector& s, const std::vector ynsize+1) { for (int i=ynsize; i(cln::realpart(value))); - else if (!x.imag().is_rational()) + else if (!instanceof(imagpart(value), cln::cl_RA_ring)) prec = cln::float_format(cln::the(cln::imagpart(value))); // [Kol] (5.3) @@ -1925,9 +1934,9 @@ numeric S_num(int n, int p, const numeric& x) cln::cl_N res2; for (int r=0; r(n).to_int(); + const int p_ = ex_to(p).to_int(); if (is_a(x)) { - return S_num(ex_to(n).to_int(), ex_to(p).to_int(), ex_to(x)); + const cln::cl_N x_ = ex_to(x).to_cl_N(); + const cln::cl_N result = S_num(n_, p_, x_); + return numeric(result); } else { ex x_val = x.evalf(); if (is_a(x_val)) { - return S_num(ex_to(n).to_int(), ex_to(p).to_int(), ex_to(x_val)); + const cln::cl_N x_val_ = ex_to(x_val).to_cl_N(); + const cln::cl_N result = S_num(n_, p_, x_val_); + return numeric(result); } } } @@ -2008,7 +2023,11 @@ static ex S_eval(const ex& n, const ex& p, const ex& x) return Li(n+1, x); } if (x.info(info_flags::numeric) && (!x.info(info_flags::crational))) { - return S_num(ex_to(n).to_int(), ex_to(p).to_int(), ex_to(x)); + int n_ = ex_to(n).to_int(); + int p_ = ex_to(p).to_int(); + const cln::cl_N x_ = ex_to(x).to_cl_N(); + const cln::cl_N result = S_num(n_, p_, x_); + return numeric(result); } } if (n.is_zero()) {