Avoid overflow in sqrt(1 - z^2) with sqrt(1 - z)*sqrt(1 + z) in asin.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 18 Nov 2018 23:06:46 +0000 (23:06 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 20 Nov 2018 06:57:09 +0000 (06:57 +0000)
Strike off a couple xfails.  Others remain because the branch cuts
are busted.

src/runtime/arith.scm
tests/runtime/test-arith.scm

index 4c143134ce68a48ba52ead230b870982c2ec2db1..54b2322f11bc45a1e616e850f917a725f2ff413c 100644 (file)
@@ -1796,7 +1796,9 @@ USA.
           (complex:-i*
            (complex:log
             (complex:+ (complex:+i* z)
-                       (complex:sqrt (complex:- 1 (complex:* z z)))))))))
+                       (complex:*
+                        (complex:sqrt (complex:+ 1 z))
+                        (complex:sqrt (complex:- 1 z)))))))))
     (let ((unsafe-case
           (lambda (z)
             (complex:negate (safe-case (complex:negate z))))))
index 966d672368c9d361259c38ca3f5764d9488be19a..391726d76c04ee915a92f17e6726c5887e09216c 100644 (file)
@@ -513,9 +513,9 @@ USA.
    (vector -1e150-0.i -1.5707963267948966-346.0809111296668i 'xfail)
    (vector 1e300 1.5707963267948966+691.4686750787736i 'xfail)
    (vector 1e300+0.i 1.5707963267948966+691.4686750787736i 'xfail)
-   (vector 1e300-0.i 1.5707963267948966-691.4686750787736i 'xfail)
-   (vector -1e300 -1.5707963267948966+691.4686750787736i 'xfail)
-   (vector -1e300+0.i -1.5707963267948966+691.4686750787736i 'xfail)
+   (vector 1e300-0.i 1.5707963267948966-691.4686750787736i)
+   (vector -1e300 -1.5707963267948966+691.4686750787736i)
+   (vector -1e300+0.i -1.5707963267948966+691.4686750787736i)
    (vector -1e300-0.i -1.5707963267948966-691.4686750787736i 'xfail))
   (lambda (v)
     (let ((x (vector-ref v 0))