diff options
author | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-01-28 14:22:05 +0000 |
---|---|---|
committer | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-01-28 14:22:05 +0000 |
commit | 0d0a6452168bfa99b9fef5808c81738245992bc0 (patch) | |
tree | 7adc2d00d0d52fd8c59f10349506fe5e1a3e727b /get_d.c | |
parent | 2f7d3ed598d3f6ec2925673ebc527d729a253576 (diff) | |
download | mpfr-0d0a6452168bfa99b9fef5808c81738245992bc0.tar.gz |
Better supports of non IEEE-754 floats (don't use anymore ieee_double_extract if _GMP_IEEE is not set).
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@2650 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'get_d.c')
-rw-r--r-- | get_d.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -1,7 +1,7 @@ /* mpfr_get_d -- convert a multiple precision floating-point number to a machine double precision float -Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the MPFR Library. @@ -119,6 +119,14 @@ mpfr_scale2 (double d, int exp) { double factor; + /* An overflow may occurs (example: 0.5*2^1024) */ + if (d < 1.0) + { + d += d; + exp--; + } + /* Now 1.0 <= d < 2.0 */ + if (exp < 0) { factor = 0.5; @@ -153,7 +161,7 @@ mpfr_get_d3 (mpfr_srcptr src, mp_exp_t e, mp_rnd_t rnd_mode) if (MPFR_IS_NAN(src)) return MPFR_DBL_NAN; - negative = MPFR_SIGN(src) < 0; + negative = MPFR_IS_NEG (src); if (MPFR_IS_INF(src)) return negative ? MPFR_DBL_INFM : MPFR_DBL_INFP; |