Simplify flo:-inf.0 and flo:+inf.0.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 25 Aug 2019 18:32:03 +0000 (18:32 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 25 Aug 2019 19:14:30 +0000 (19:14 +0000)
We have put out a release now whose reader understands +inf.0/-inf.0,
so we should be able to use the notation.

Fixes bugs with incorrectly raising the divide-by-zero exception flag
(even if no trap), e.g.:

;|log1mexp-invalid/(4.9406564584124654e-324)| failed 1 sub-tests out of 1 in 0. seconds:
     assertion 3: value was 3 but expected an object eqv? to 1

Here 3 = (invalid-operation divide-by-zero), 1 = (invalid-operation)
[aarch64].

src/runtime/floenv.scm

index db188d25f2aea811283d2d5d01d6e42861cb6f71..fc6254859a43c455eccc5fcd72dd69aad5ce0de1 100644 (file)
@@ -156,7 +156,6 @@ USA.
           ((ucode-primitive set-trapped-float-exceptions 1)
            (flo:default-trapped-exceptions))
           ((ucode-primitive float-environment 0)))))
-  (initialize-flonum-infinities!)
   unspecific)
 
 (define (initialize-package!)
@@ -355,24 +354,5 @@ USA.
 (define (flo:nan.0)
   (flo:make-nan #f #t 0))
 
-(define flo:+inf.0)
-(define flo:-inf.0)
-(define (initialize-flonum-infinities!)
-  (if (flo:have-trap-enable/disable?)
-      (begin
-       (set! flo:+inf.0
-             (named-lambda (flo:+inf.0)
-               (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
-                                              (lambda ()
-                                                (flo:/ +1. 0.)))))
-       (set! flo:-inf.0
-             (named-lambda (flo:-inf.0)
-               (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
-                                              (lambda ()
-                                                (flo:/ -1. 0.)))))
-       unspecific)
-      ;; This works on macOS.  YMMV.
-      (begin
-       (set! flo:+inf.0 (named-lambda (flo:+inf.0) (flo:/ +1. 0.)))
-       (set! flo:-inf.0 (named-lambda (flo:-inf.0) (flo:/ -1. 0.)))
-       unspecific)))
\ No newline at end of file
+(define (flo:+inf.0) +inf.0)
+(define (flo:-inf.0) -inf.0)
\ No newline at end of file