diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2002-04-12 14:29:49 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2002-04-12 14:29:49 +0000 |
commit | f0544a42b7d141e3615d51b228ccd8b12549eab4 (patch) | |
tree | 883fae979063a9bfdbb2b367ecc5aacbbda1453e | |
parent | d4ab36cc814012a82534f9b7610628e631f3dfe7 (diff) | |
download | mpfr-f0544a42b7d141e3615d51b228ccd8b12549eab4.tar.gz |
mpfr_get_d* fixed.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1862 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r-- | BUGS | 2 | ||||
-rw-r--r-- | get_d.c | 8 |
2 files changed, 6 insertions, 4 deletions
@@ -12,6 +12,4 @@ Knowns bugs: * TMP_ALLOC problems in agm.c and sqrt.c. (Kevin Ryde, 05 March 2002) -* get_d.c: still some problems with subnormals (the test fails). - * mpfr_set_d may give wrong results on some architectures. @@ -117,8 +117,12 @@ mpfr_get_d3 (mpfr_srcptr src, mp_exp_t e, mp_rnd_t rnd_mode) if (e < -1073) { d = negative ? - (rnd_mode == GMP_RNDD ? -DBL_MIN * DBL_EPSILON : -0.0) : - (rnd_mode == GMP_RNDU ? DBL_MIN * DBL_EPSILON : 0.0); + (rnd_mode == GMP_RNDD || + (rnd_mode == GMP_RNDN && mpfr_cmp_si_2exp(src, -1, -1075) < 0) + ? -DBL_MIN * DBL_EPSILON : -0.0) : + (rnd_mode == GMP_RNDU || + (rnd_mode == GMP_RNDN && mpfr_cmp_si_2exp(src, 1, -1075) > 0) + ? DBL_MIN * DBL_EPSILON : 0.0); } /* the largest normalized number is 2^1024*(1-2^(-53))=0.111...111e1024 */ else if (e > 1024) |