Teach exact->inexact to return infinity rather than crash.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 30 Nov 2018 05:11:35 +0000 (05:11 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 30 Nov 2018 06:53:16 +0000 (06:53 +0000)
src/runtime/arith.scm
tests/runtime/test-arith.scm

index b47cd6fbffc8f39a24757694fa919db382992a68..807fb1abf1eb1fa74be740515ea30b41e9d16db3 100644 (file)
@@ -959,9 +959,9 @@ USA.
        (else (slow-method n d))))
 
 (define (int:->inexact n)
-  (if (fixnum? n)
-      (fixnum->flonum n) ;; 8.0 compiler open-codes when is N fixnum (by test)
-      (integer->flonum n #b10)))
+  (cond ((fixnum? n) (fixnum->flonum n))
+       ((integer->flonum n #b00))
+       (else (if (int:negative? n) (flo:-inf.0) (flo:+inf.0)))))
 \f
 (define (flo:significand-digits radix)
   (cond ((int:= radix 10)
index def02c89589d05f2502eb635ec1d369ff0baedb4..bc023e694edcc5168ff1831a1c4481bae3dcb29b 100644 (file)
@@ -900,16 +900,13 @@ USA.
     (,(- (+ 3 (expt flo:radix flo:precision)))
      ,(- (+ 4 (expt flo:radix. flo:precision))))
     (,(expt flo:radix (+ 1 flo:normal-exponent-max))
-     +inf.0
-     ,expect-error)
+     +inf.0)
     (,(expt flo:radix (* 2 flo:normal-exponent-max))
-     +inf.0
-     ,expect-error)
+     +inf.0)
     (,(- (expt flo:radix (+ 1 flo:normal-exponent-max)))
      -inf.0)
     (,(- (expt flo:radix (* 2 flo:normal-exponent-max)))
-     -inf.0
-     ,expect-error)
+     -inf.0)
     (,(- (expt flo:radix (+ 1 flo:normal-exponent-max))
          (expt flo:radix (- (+ 1 flo:normal-exponent-max) flo:precision)))
      ,flo:largest-positive-normal)