diff --git a/pkgs/racket-test-core/tests/racket/numstrs.rktl b/pkgs/racket-test-core/tests/racket/numstrs.rktl index bf01770a18..e6d7afb2dd 100644 --- a/pkgs/racket-test-core/tests/racket/numstrs.rktl +++ b/pkgs/racket-test-core/tests/racket/numstrs.rktl @@ -53,6 +53,7 @@ (-0.0 "-1#e-10000000000000000000000000000000") (1e-134 "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001") + (-0.0 "-632.3206524753840966914228247597079196012717570277972845484e-399") (10.0 "1#") (10.0 "1#e0") (10.0 "1####e-3") diff --git a/racket/src/racket/src/numstr.c b/racket/src/racket/src/numstr.c index a3817d101b..ac7b837b45 100644 --- a/racket/src/racket/src/numstr.c +++ b/racket/src/racket/src/numstr.c @@ -1481,7 +1481,8 @@ Scheme_Object *scheme_read_number(const mzchar *str, intptr_t len, max_useful = scheme_bin_plus(scheme_make_integer(MAX_FLOATREAD_PRECISION_DIGITS(is_long_double)), exponent); - if (scheme_bin_lt(max_useful, scheme_make_integer(0))) { + if (scheme_bin_lt(max_useful, scheme_make_integer(2))) { + /* will definitely underflow */ if (dcp > 2) dcp = 2; /* leave room for a sign and a digit */ } else if (SCHEME_INTP(max_useful)) {