X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Finifcns_nstdsums.cpp;h=ec9586ed9367160fcd3b5a97fb5a3dda4db84ebf;hp=3b7fc556892398c64180d6ffc78f4cdf4d242593;hb=bb2430ce924b2bb49bc537a63aeddfc8326b9188;hpb=123af8aae6d967484dfc98efd6389c8ef8c5e62a diff --git a/ginac/inifcns_nstdsums.cpp b/ginac/inifcns_nstdsums.cpp index 3b7fc556..ec9586ed 100644 --- a/ginac/inifcns_nstdsums.cpp +++ b/ginac/inifcns_nstdsums.cpp @@ -939,9 +939,8 @@ numeric S_num(int n, int p, const numeric& x) else if (!x.imag().is_rational()) prec = cln::float_format(cln::the(cln::imagpart(value))); - // [Kol] (5.3) - if (cln::realpart(value) < -0.5) { + if ((cln::realpart(value) < -0.5) || (n == 0)) { cln::cl_N result = cln::expt(cln::cl_I(-1),p) * cln::expt(cln::log(value),n) * cln::expt(cln::log(1-value),p) / cln::factorial(n) / cln::factorial(p); @@ -1029,6 +1028,10 @@ static ex S_eval(const ex& n, const ex& p, const ex& x) return S_num(ex_to(n).to_int(), ex_to(p).to_int(), ex_to(x)); } } + if (n.is_zero()) { + // [Kol] (5.3) + return pow(-log(1-x), p) / factorial(p); + } return S(n, p, x).hold(); }