Make flo:nan.0 reliably return a `positive' quiet NaN with payload 0.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 7 Dec 2018 04:16:41 +0000 (04:16 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 7 Dec 2018 17:17:28 +0000 (17:17 +0000)
src/runtime/floenv.scm

index f3985562db0c0e1db2383194e3aedfc11af01d4c..5fe50699b6d1a409d990f46990edfd00cdbb0f35 100644 (file)
@@ -365,7 +365,9 @@ USA.
      (flo:untrap-exceptions! exceptions)
      (procedure))))
 
-(define flo:nan.0)
+(define (flo:nan.0)
+  (flo:make-nan #f #t 0))
+
 (define flo:+inf.0)
 (define flo:-inf.0)
 ;;; ZERO can be eliminated after 9.3 is released.  It works around
@@ -373,11 +375,6 @@ USA.
 (let ((zero (lambda () (identity-procedure 0.))))
   (if (flo:have-trap-enable/disable?)
       (begin
-       (set! flo:nan.0
-             (named-lambda (flo:nan.0)
-               (flo:with-exceptions-untrapped (flo:exception:invalid-operation)
-                 (lambda ()
-                   (flo:/ 0. (zero))))))
        (set! flo:+inf.0
              (named-lambda (flo:+inf.0)
                (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
@@ -391,7 +388,6 @@ USA.
        unspecific)
       ;; This works on macOS.  YMMV.
       (begin
-       (set! flo:nan.0 (named-lambda (flo:nan.0) (flo:/ 0. (zero))))
        (set! flo:+inf.0 (named-lambda (flo:+inf.0) (flo:/ +1. (zero))))
        (set! flo:-inf.0 (named-lambda (flo:-inf.0) (flo:/ -1. (zero))))
        unspecific)))
\ No newline at end of file