diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2005-09-06 13:42:02 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2005-09-06 13:42:02 +0000 |
commit | 4b20ff4a319629060cf091963e56ab619318a3ac (patch) | |
tree | 522621aa1dce4602808a791228b46a4ea137fc72 /lngamma.c | |
parent | 732d17fd4a199687aa89797df6bd13a2895c01b7 (diff) | |
download | mpfr-4b20ff4a319629060cf091963e56ab619318a3ac.tar.gz |
Code clean-up (again).
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3790 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'lngamma.c')
-rw-r--r-- | lngamma.c | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -131,6 +131,7 @@ int mpfr_lngamma int inexact, compared; mp_exp_t err_s, err_t; unsigned long Bm = 0; /* number of allocated B[] */ + unsigned long oldBm; double d; MPFR_SAVE_EXPO_DECL (expo); @@ -254,6 +255,8 @@ int mpfr_lngamma /* now z0 > 1 */ + MPFR_ASSERTN (compared > 0); + /* since k is O(w), the value of log(z0*...*(z0+k-1)) is about w*log(w), so there is a cancellation of ~log(w) in the argument reconstruction */ w = precy + __gmpfr_ceil_log2 ((double) precy); @@ -436,16 +439,14 @@ int mpfr_lngamma while (!mpfr_can_round (s, w - err_s, GMP_RNDN, GMP_RNDZ, precy + (rnd == GMP_RNDN))); + oldBm = Bm; + while (Bm--) + mpz_clear (B[Bm]); + (*__gmp_free_func) (B, oldBm * sizeof (mpz_t)); + end: inexact = mpfr_set (y, s, rnd); - if (compared > 0) - { - unsigned long oldBm = Bm; - while (Bm--) - mpz_clear (B[Bm]); - (*__gmp_free_func) (B, oldBm * sizeof (mpz_t)); - } mpfr_clear (s); mpfr_clear (t); mpfr_clear (u); |