Bug 482002: Update dtoa.c from http://www.netlib.org/fp/dtoa.c dated

Tue Feb  2 23:05:34 MST 2010


git-svn-id: svn://10.0.0.236/trunk@259889 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
wtc%google.com
2010-03-06 02:16:08 +00:00
parent c5d3e3f5b7
commit f2cf34c213

View File

@@ -2791,9 +2791,6 @@ strtod
if (e1 &= ~15) {
if (e1 > DBL_MAX_10_EXP) {
ovfl:
#ifndef NO_ERRNO
errno = ERANGE;
#endif
/* Can't trust HUGE_VAL */
#ifdef IEEE_Arith
#ifdef Honor_FLT_ROUNDS
@@ -2820,6 +2817,17 @@ strtod
word0(&rv) = Big0;
word1(&rv) = Big1;
#endif /*IEEE_Arith*/
range_err:
if (bd0) {
Bfree(bb);
Bfree(bd);
Bfree(bs);
Bfree(bd0);
Bfree(delta);
}
#ifndef NO_ERRNO
errno = ERANGE;
#endif
goto ret;
}
e1 >>= 4;
@@ -2884,10 +2892,7 @@ strtod
if (!dval(&rv)) {
undfl:
dval(&rv) = 0.;
#ifndef NO_ERRNO
errno = ERANGE;
#endif
goto ret;
goto range_err;
}
#ifndef Avoid_Underflow
word0(&rv) = Tiny0;
@@ -3123,7 +3128,7 @@ strtod
adj.d *= ulp(&rv);
if (bc.dsign) {
if (word0(&rv) == Big0 && word1(&rv) == Big1)
goto ovflfree;
goto ovfl;
dval(&rv) += adj.d;
}
else
@@ -3174,6 +3179,8 @@ strtod
#endif
0xffffffff)) {
/*boundary case -- increment exponent*/
if (word0(&rv) == Big0 && word1(&rv) == Big1)
goto ovfl;
word0(&rv) = (word0(&rv) & Exp_mask)
+ Exp_msk1
#ifdef IBM
@@ -3338,17 +3345,8 @@ strtod
dval(&rv) += adj.d;
if ((word0(&rv) & Exp_mask) >=
Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
#ifdef Honor_FLT_ROUNDS
ovflfree:
#endif
Bfree(bb);
Bfree(bd);
Bfree(bs);
Bfree(bd0);
Bfree(delta);
if (word0(&rv0) == Big0 && word1(&rv0) == Big1)
goto ovfl;
}
word0(&rv) = Big0;
word1(&rv) = Big1;
goto cont;
@@ -3468,8 +3466,14 @@ strtod
Bfree(delta);
#ifndef NO_STRTOD_BIGCOMP
if (bc.nd > nd && bc.dsign) {
bd0 = 0;
bc.e0 += nz1;
bigcomp(&rv, s0, &bc);
y = word0(&rv) & Exp_mask;
if (y == Exp_mask)
goto ovfl;
if (y == 0 && rv.d == 0.)
goto undfl;
}
#endif
#ifdef SET_INEXACT