From: Bart B. <00...@gm...> - 2008-08-20 17:25:42
|
bug report/test case from #lisp: <wgl> Holy. Cow. The 'time' function in SBCL just ate 3.1 gigs of my disk. It goes wild with "Evaluation took: 15.00000*" where the string of zeroes stopped only when i killed the program. <Krystof> (%format-decimal *standard-output* 15000000 3) ; explodes for me patch against 1.0.19 to not use %fraction when fraction is 0 in %format-decimal: --- sbcl-1.0.19-orig/src/code/time.lisp Sat May 17 06:02:29 2008 +++ sbcl-1.0.19/src/code/time.lisp Wed Aug 20 12:11:12 2008 @@ -324,18 +324,20 @@ (write-char #\- stream) (setf number (- number))) (let ((scale (expt 10 power))) - (flet ((%fraction (fraction) - (let ((scaled (* 10 fraction))) - (loop while (< scaled scale) - do (write-char #\0 stream) - (setf scaled (* scaled 10)))) - (format stream "~D" fraction)) - (%zeroes () + (labels ((%zeroes () (let ((scaled (/ scale 10))) (write-char #\0 stream) (loop while (> scaled 1) do (write-char #\0 stream) - (setf scaled (/ scaled 10)))))) + (setf scaled (/ scaled 10))))) + (%fraction (fraction) + (if (zerop fraction) + (%zeroes) + (let ((scaled (* 10 fraction))) + (loop while (< scaled scale) + do (write-char #\0 stream) + (setf scaled (* scaled 10))))) + (format stream "~D" fraction))) (cond ((zerop number) (write-string "0." stream) (%zeroes)) |