diff --git a/mats/ieee.ms b/mats/ieee.ms index b85a6f4ec7..829ed57117 100644 --- a/mats/ieee.ms +++ b/mats/ieee.ms @@ -714,7 +714,7 @@ (equal? (number->string 1.1665795231290236e-302) "1.1665795231290236e-302") ; fp printing algorithm always rounds up on ties (equal? (number->string 3.6954879760742188e-6) "3.6954879760742188e-6") - (equal? (number->string 5.629499534213123e14) "5.629499534213123e+14") + (equal? (number->string 5.629499534213123e14) "562949953421312.3") ) (mat string->number diff --git a/s/print.ss b/s/print.ss index 09758ee691..3e6c216f1d 100644 --- a/s/print.ss +++ b/s/print.ss @@ -1058,7 +1058,15 @@ floating point returns with (1 0 -1 ...). (if (fx< s 0) (write-char #\- p) (when force-sign (write-char #\+ p))) - (if (or (fx> r 10) (fx< -4 e 10)) + (if (or (fx> r 10) (cond + [(fx< e -4) #f] + [(fx< e 14) #t] + [else + (let ([digits (let loop ([ls ls] [digits 0]) + (if (fx< (car ls) 0) + digits + (loop (cdr ls) (fx+ digits 1))))]) + (fx< (fx- e digits) 3))])) (free-format e ls p) (free-format-exponential e ls r p)))) (cond