From bb2430ce924b2bb49bc537a63aeddfc8326b9188 Mon Sep 17 00:00:00 2001 From: Jens Vollinga Date: Thu, 18 Mar 2004 17:03:24 +0000 Subject: [PATCH 1/1] S(0,p,x) now evaluates numerically --- 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 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(); } -- 2.44.0