summaryrefslogtreecommitdiff
path: root/const_pi.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-05-04 12:46:13 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-05-04 12:46:13 +0000
commit934011825f8667f31f32e470a8bff39f34cdc9f2 (patch)
tree023b70a3590e0f3a638105226aed3e09b4829393 /const_pi.c
parent96ae0c5e539f1ccdc3ca7df4cf82ec9595cb782c (diff)
downloadmpfr-934011825f8667f31f32e470a8bff39f34cdc9f2.tar.gz
Push/Pop emin/emax so that an overflow can't occur in mpfr_set_z(x,pi,r)
Add test too. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@2890 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'const_pi.c')
-rw-r--r--const_pi.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/const_pi.c b/const_pi.c
index 634808f43..59b4d3b57 100644
--- a/const_pi.c
+++ b/const_pi.c
@@ -156,6 +156,8 @@ int
mpfr_t y;
int inex;
+ mpfr_save_emin_emax ();
+
prec = MPFR_PREC(x);
if (prec < 20000)
@@ -206,16 +208,18 @@ int
mpfr_set_z (y, pi, rnd_mode);
MPFR_ASSERTN (mpfr_cmp (x, y) == 0);
MPFR_SET_EXP (x, MPFR_GET_EXP(x) - 4*N);
+ mpfr_clear (y);
mpz_clear(pi);
mpz_clear(num);
mpz_clear(den);
mpz_clear(d3);
mpz_clear(d2);
mpz_clear(tmp);
- mpfr_clear(y);
}
else
inex = mpfr_pi_machin3 (x, rnd_mode);
+ mpfr_restore_emin_emax ();
+
return inex;
}