Fix parsing of 0e401 on USE_EXPLICT_FP_FORM_CHECK platforms.
This commit is contained in:
parent
8e46e46d40
commit
aff167b13d
|
@ -2727,6 +2727,8 @@
|
||||||
(test (- (sub1 (expt 2 256))) string->number "-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 16)
|
(test (- (sub1 (expt 2 256))) string->number "-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 16)
|
||||||
(test #f string->number "144r" 10)
|
(test #f string->number "144r" 10)
|
||||||
(err/rt-test (string->number "10" 30))
|
(err/rt-test (string->number "10" 30))
|
||||||
|
(test 0.0 string->number "0e401")
|
||||||
|
(test 0.0 string->number "00000.00000e9999999999")
|
||||||
|
|
||||||
(define (q-test quotient)
|
(define (q-test quotient)
|
||||||
(test 0 quotient 0 12345678909876532341)
|
(test 0 quotient 0 12345678909876532341)
|
||||||
|
|
|
@ -386,7 +386,7 @@ END_XFORM_ARITH;
|
||||||
static double STRTOD(const char *orig_c, char **f, int extfl)
|
static double STRTOD(const char *orig_c, char **f, int extfl)
|
||||||
{
|
{
|
||||||
int neg = 0;
|
int neg = 0;
|
||||||
int found_dot = 0, is_infinity = 0, is_zero = 0;
|
int found_dot = 0, is_infinity = 0, is_zero = 0, is_nonzero = 0;
|
||||||
const char *c = orig_c;
|
const char *c = orig_c;
|
||||||
|
|
||||||
*f = (char *)c;
|
*f = (char *)c;
|
||||||
|
@ -410,7 +410,8 @@ static double STRTOD(const char *orig_c, char **f, int extfl)
|
||||||
int ch = *c;
|
int ch = *c;
|
||||||
|
|
||||||
if (isdigit(ch)) {
|
if (isdigit(ch)) {
|
||||||
/* ok */
|
if (ch != '0')
|
||||||
|
is_nonzero = 1;
|
||||||
} else if ((ch == 'e') || (ch == 'E')) {
|
} else if ((ch == 'e') || (ch == 'E')) {
|
||||||
int e = 0, neg_exp = 0;
|
int e = 0, neg_exp = 0;
|
||||||
|
|
||||||
|
@ -431,7 +432,7 @@ static double STRTOD(const char *orig_c, char **f, int extfl)
|
||||||
else {
|
else {
|
||||||
e = (e * 10) + (ch - '0');
|
e = (e * 10) + (ch - '0');
|
||||||
if (e > CHECK_INF_EXP_THRESHOLD(extfl)) {
|
if (e > CHECK_INF_EXP_THRESHOLD(extfl)) {
|
||||||
if (neg_exp)
|
if (neg_exp || !is_nonzero)
|
||||||
is_zero = 1;
|
is_zero = 1;
|
||||||
else
|
else
|
||||||
is_infinity = 1;
|
is_infinity = 1;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user