From: Jens Vollinga Date: Thu, 18 Mar 2004 17:03:24 +0000 (+0000) Subject: S(0,p,x) now evaluates numerically X-Git-Tag: release_1-2-0~2 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=commitdiff_plain;h=bb2430ce924b2bb49bc537a63aeddfc8326b9188;p=ginac.git S(0,p,x) now evaluates numerically --- 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(); }