Make (make-polar magnitude 0) return magnitude.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 18 Nov 2018 01:44:49 +0000 (01:44 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 18 Nov 2018 01:44:49 +0000 (01:44 +0000)
src/runtime/arith.scm
tests/runtime/test-arith.scm

index 03b1cacac547d078b2b18daeef2666ffe47929e6..77a53f2809398adde3cd4ced421bd3ed0cd8ea71 100644 (file)
@@ -1916,8 +1916,10 @@ USA.
       (make-recnum real imag)))
 
 (define (complex:%make-polar magnitude angle)
-  (complex:%make-rectangular (real:* magnitude (real:cos angle))
-                            (real:* magnitude (real:sin angle))))
+  (if (real:exact0= angle)
+      magnitude
+      (complex:%make-rectangular (real:* magnitude (real:cos angle))
+                                (real:* magnitude (real:sin angle)))))
 
 (define (complex:real-part z)
   (cond ((recnum? z) (rec:real-part z))
index 7c533512a4e2cb983c59b4e6e63f1cf40d112d32..5b3774f8dda265cabfb2ae47da94e815fa7817e6 100644 (file)
@@ -138,15 +138,10 @@ USA.
     (assert-nan (apply * l))))
 
 (define-enumerated-test 'polar0-real
-  (vector 0 0. -0. 1 1. -1.)
+  (vector 0 0. -0. 1 1. -1. (flo:+inf.0) (flo:-inf.0))
   (lambda (magnitude)
     (assert-real (make-polar magnitude 0))))
 
-(define-enumerated-test 'polar0-real-xfail
-  (vector (flo:+inf.0) (flo:-inf.0))
-  (lambda (magnitude)
-    (expect-failure (lambda () (assert-real (make-polar magnitude 0))))))
-
 (define-enumerated-test 'flo:ulp
   (vector
    (vector (flo:-inf.0) (flo:+inf.0))