diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2009-03-15 03:17:06 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2009-03-15 03:17:06 +0000 |
commit | 88cfdb3cb4164751c46bc32306b367f8ab5536dd (patch) | |
tree | ad5b9caf57d42de882201c8737e71c9550f0b37c | |
parent | d0c7735f7097b16a6ff232ebea3c0db768397b61 (diff) | |
download | mpfr-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.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -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); |