]> www.ginac.de Git - ginac.git/blobdiff - ginac/numeric.cpp
define lgamma and tgamma taking cl_N as an argument.
[ginac.git] / ginac / numeric.cpp
index 40aa8e2ee90ec1b18e10a0e75a6d0084de81c81b..69a787b5d985b5e174ea61a6f38c7b89f2bb3a2c 100644 (file)
@@ -1977,7 +1977,7 @@ static const cln::float_format_t guess_precision(const cln::cl_N& x)
  *  sufficiently many or sufficiently accurate, more can be calculated
  *  using the program doc/examples/lanczos.cpp. In that case, be sure to
  *  read the comments in that file. */
-const cln::cl_N lgamma_(const cln::cl_N &x)
+const cln::cl_N lgamma(const cln::cl_N &x)
 {
        cln::float_format_t prec = guess_precision(x);
        lanczos_coeffs lc;
@@ -1985,7 +1985,7 @@ const cln::cl_N lgamma_(const cln::cl_N &x)
                cln::cl_N pi_val = cln::pi(prec);
                if (realpart(x) < 0.5)
                        return cln::log(pi_val) - cln::log(sin(pi_val*x))
-                               - lgamma_(1 - x);
+                               - lgamma(1 - x);
                cln::cl_N A = lc.calc_lanczos_A(x);
                cln::cl_N temp = x + lc.get_order() - cln::cl_N(1)/2;
        cln::cl_N result = log(cln::cl_I(2)*pi_val)/2
@@ -2001,18 +2001,18 @@ const cln::cl_N lgamma_(const cln::cl_N &x)
 const numeric lgamma(const numeric &x)
 {
        const cln::cl_N x_ = x.to_cl_N();
-       const cln::cl_N result = lgamma_(x_);
+       const cln::cl_N result = lgamma(x_);
        return numeric(result);
 }
 
-const cln::cl_N tgamma_(const cln::cl_N &x)
+const cln::cl_N tgamma(const cln::cl_N &x)
 {
        cln::float_format_t prec = guess_precision(x);
        lanczos_coeffs lc;
        if (lc.sufficiently_accurate(prec)) {
                cln::cl_N pi_val = cln::pi(prec);
                if (realpart(x) < 0.5)
-                       return pi_val/(cln::sin(pi_val*x))/tgamma_(1 - x);
+                       return pi_val/(cln::sin(pi_val*x))/tgamma(1 - x);
                cln::cl_N A = lc.calc_lanczos_A(x);
                cln::cl_N temp = x + lc.get_order() - cln::cl_N(1)/2;
        cln::cl_N result
@@ -2027,7 +2027,7 @@ const cln::cl_N tgamma_(const cln::cl_N &x)
 const numeric tgamma(const numeric &x)
 {
        const cln::cl_N x_ = x.to_cl_N();
-       const cln::cl_N result = tgamma_(x_);
+       const cln::cl_N result = tgamma(x_);
        return numeric(result);
 }
 
@@ -2161,7 +2161,7 @@ const numeric bernoulli(const numeric &nn)
                next_r = 4;
        }
        if (n<next_r)
-               return results[n/2-1];
+               return numeric(results[n/2-1]);
 
        results.reserve(n/2);
        for (unsigned p=next_r; p<=n;  p+=2) {
@@ -2186,7 +2186,7 @@ const numeric bernoulli(const numeric &nn)
                results.push_back(-b/(p+1));
        }
        next_r = n+2;
-       return results[n/2-1];
+       return numeric(results[n/2-1]);
 }
 
 
@@ -2243,9 +2243,9 @@ const numeric fibonacci(const numeric &n)
        if (n.is_even())
                // Here we don't use the squaring formula because one multiplication
                // is cheaper than two squarings.
-               return u * ((v << 1) - u);
+               return numeric(u * ((v << 1) - u));
        else
-               return cln::square(u) + cln::square(v);    
+               return numeric(cln::square(u) + cln::square(v)); 
 }
 
 
@@ -2363,7 +2363,7 @@ const numeric iquo(const numeric &a, const numeric &b, numeric &r)
                const cln::cl_I_div_t rem_quo = cln::truncate2(cln::the<cln::cl_I>(a.to_cl_N()),
                                                               cln::the<cln::cl_I>(b.to_cl_N()));
                r = numeric(rem_quo.remainder);
-               return rem_quo.quotient;
+               return numeric(rem_quo.quotient);
        } else {
                r = *_num0_p;
                return *_num0_p;