diff options
author | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-05-04 12:46:13 +0000 |
---|---|---|
committer | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-05-04 12:46:13 +0000 |
commit | 934011825f8667f31f32e470a8bff39f34cdc9f2 (patch) | |
tree | 023b70a3590e0f3a638105226aed3e09b4829393 /const_pi.c | |
parent | 96ae0c5e539f1ccdc3ca7df4cf82ec9595cb782c (diff) | |
download | mpfr-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.c | 6 |
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; } |