summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2009-03-15 03:17:06 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2009-03-15 03:17:06 +0000
commit88cfdb3cb4164751c46bc32306b367f8ab5536dd (patch)
treead5b9caf57d42de882201c8737e71c9550f0b37c
parentd0c7735f7097b16a6ff232ebea3c0db768397b61 (diff)
downloadmpfr-88cfdb3cb4164751c46bc32306b367f8ab5536dd.tar.gz
get_ld.c: fixed bugs in the case HAVE_LDOUBLE_IEEE_EXT_LITTLE (one found
by Steve Kargl, and another one concerning the mpfr_set_emax value). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@6101 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r--get_ld.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/get_ld.c b/get_ld.c
index 46cefb34e..2c860aa07 100644
--- a/get_ld.c
+++ b/get_ld.c
@@ -107,14 +107,17 @@ mpfr_get_ld (mpfr_srcptr x, mp_rnd_t rnd_mode)
{
mpfr_long_double_t ld;
mpfr_t tmp;
+ int inex;
MPFR_SAVE_EXPO_DECL (expo);
MPFR_SAVE_EXPO_MARK (expo);
- mpfr_set_emin (-16382-63);
- mpfr_set_emax (16383);
mpfr_init2 (tmp, MPFR_LDBL_MANT_DIG);
- mpfr_subnormalize(tmp, mpfr_set (tmp, x, rnd_mode), rnd_mode);
+ inex = mpfr_set (tmp, x, rnd_mode);
+
+ mpfr_set_emin (-16382-63);
+ mpfr_set_emax (16384);
+ mpfr_subnormalize (tmp, mpfr_check_range (tmp, inex, rnd_mode), rnd_mode);
mpfr_prec_round (tmp, 64, MPFR_RNDZ); /* exact */
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (tmp)))
ld.ld = (long double) mpfr_get_d (tmp, rnd_mode);