summaryrefslogtreecommitdiff
path: root/lngamma.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2006-08-21 12:45:17 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2006-08-21 12:45:17 +0000
commit5d14ce4167d150657f030083b31312c1da612bce (patch)
tree0615667d94e45433c0a95b74a42bee2eb98feca5 /lngamma.c
parentab9a0cc54b357ddd48607767d376941defc65e92 (diff)
downloadmpfr-5d14ce4167d150657f030083b31312c1da612bce.tar.gz
Fixed an exponent/flags-related bug in lngamma.c.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/2.2@4137 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'lngamma.c')
-rw-r--r--lngamma.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/lngamma.c b/lngamma.c
index 343f8a5ee..3ef3a1fe2 100644
--- a/lngamma.c
+++ b/lngamma.c
@@ -154,11 +154,16 @@ GAMMA_FUNC (mpfr_ptr y, mpfr_srcptr z0, mp_rnd_t rnd)
}
/* if x < 0 and -2k-1 <= x <= -2k, then lngamma(x) = NaN */
- if (MPFR_IS_NEG(z0) && ((mpfr_get_si (z0, GMP_RNDZ) % 2) == 0
- || mpfr_integer_p (z0)))
+ if (MPFR_IS_NEG (z0))
{
- MPFR_SET_NAN (y);
- MPFR_RET_NAN;
+ MPFR_SAVE_EXPO_MARK (expo);
+ if (mpfr_get_si (z0, GMP_RNDZ) % 2 == 0 || mpfr_integer_p (z0))
+ {
+ MPFR_SAVE_EXPO_FREE (expo);
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ MPFR_SAVE_EXPO_FREE (expo);
}
#endif