summaryrefslogtreecommitdiff
path: root/lngamma.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2005-09-06 13:42:02 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2005-09-06 13:42:02 +0000
commit4b20ff4a319629060cf091963e56ab619318a3ac (patch)
tree522621aa1dce4602808a791228b46a4ea137fc72 /lngamma.c
parent732d17fd4a199687aa89797df6bd13a2895c01b7 (diff)
downloadmpfr-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.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/lngamma.c b/lngamma.c
index 34c484a19..8ef07f407 100644
--- a/lngamma.c
+++ b/lngamma.c
@@ -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);