diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-02-19 16:08:41 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-02-19 16:08:41 +0000 |
commit | 89ca50133932a597517c1d40bf052935296c642f (patch) | |
tree | 1475a201dcbb30b4f82dc690daf0a7687ff9323c /src | |
parent | 2ee989e48f1f8f2a53e47271d3d0dd9a14408546 (diff) | |
download | mpfr-89ca50133932a597517c1d40bf052935296c642f.tar.gz |
[src/gamma.c] Bug fix in case the argument is an integer fitting in an
unsigned long: flags may be set while they shouldn't, and the result
may be incorrect in a very reduced exponent range.
(merged changesets r10043-10045 from the trunk)
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/3.1@10071 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src')
-rw-r--r-- | src/gamma.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/gamma.c b/src/gamma.c index efe5ca688..eefd3dd50 100644 --- a/src/gamma.c +++ b/src/gamma.c @@ -70,6 +70,9 @@ bits_fac (unsigned long n) { mpfr_t x, y; unsigned long r, k; + MPFR_SAVE_EXPO_DECL (expo); + + MPFR_SAVE_EXPO_MARK (expo); mpfr_init2 (x, 38); mpfr_init2 (y, 38); mpfr_set_ui (x, n, MPFR_RNDZ); @@ -86,6 +89,8 @@ bits_fac (unsigned long n) r -= n / k; mpfr_clear (x); mpfr_clear (y); + MPFR_SAVE_EXPO_FREE (expo); + return r; } |