]> www.ginac.de Git - ginac.git/commitdiff
Synced to 1.1
authorJens Vollinga <vollinga@thep.physik.uni-mainz.de>
Thu, 18 Mar 2004 17:08:05 +0000 (17:08 +0000)
committerJens Vollinga <vollinga@thep.physik.uni-mainz.de>
Thu, 18 Mar 2004 17:08:05 +0000 (17:08 +0000)
ginac/inifcns_nstdsums.cpp

index 7652632e834ba77241295b0f53bd9a2409e912ae..5959af9efb14e02c6c00698a5b60596926942ab1 100644 (file)
@@ -811,9 +811,8 @@ numeric S_num(int n, int p, const numeric& x)
        else if (!x.imag().is_rational())
                prec = cln::float_format(cln::the<cln::cl_F>(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);
@@ -877,6 +876,10 @@ static ex S_eval(const ex& x1, const ex& x2, const ex& x3)
        if (x2 == 1) {
                return Li(x1+1,x3);
        }
+       if (x1.is_zero()) {
+               // [Kol] (5.3)
+               return pow(-log(1-x3), x2) / factorial(x2);
+       }
        if (x3.info(info_flags::numeric) && (!x3.info(info_flags::crational)) && 
                        x1.info(info_flags::posint) && x2.info(info_flags::posint)) {
                return S_num(ex_to<numeric>(x1).to_int(), ex_to<numeric>(x2).to_int(), ex_to<numeric>(x3));