summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2016-02-19 16:08:41 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2016-02-19 16:08:41 +0000
commit89ca50133932a597517c1d40bf052935296c642f (patch)
tree1475a201dcbb30b4f82dc690daf0a7687ff9323c /src
parent2ee989e48f1f8f2a53e47271d3d0dd9a14408546 (diff)
downloadmpfr-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.c5
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;
}