summaryrefslogtreecommitdiff
path: root/get_d.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-01-28 14:22:05 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-01-28 14:22:05 +0000
commit0d0a6452168bfa99b9fef5808c81738245992bc0 (patch)
tree7adc2d00d0d52fd8c59f10349506fe5e1a3e727b /get_d.c
parent2f7d3ed598d3f6ec2925673ebc527d729a253576 (diff)
downloadmpfr-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.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/get_d.c b/get_d.c
index fce0151ea..ff01151f2 100644
--- a/get_d.c
+++ b/get_d.c
@@ -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;