summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Wilniewczyc <artur.wilniewczyc@gmail.com>2023-09-15 21:39:22 +0200
committerArtur Wilniewczyc <artur.wilniewczyc@gmail.com>2023-09-15 21:39:22 +0200
commit8fb411870fa26041c85b439f6c3ce3ce895509d7 (patch)
treecd80f79c1454488bbfae2bd1b5b436b25b9d5f6d
parent3cbde4c396a029873d7fd0a8b6aa0a65465b96d1 (diff)
Fix sqrt for complex numbers when x.im == 0
-rw-r--r--lib/complex.dx3
-rw-r--r--tests/complex-tests.dx2
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/complex.dx b/lib/complex.dx
index 4b1089af..b7c544ef 100644
--- a/lib/complex.dx
+++ b/lib/complex.dx
@@ -58,7 +58,8 @@ def complex_pow(base:Complex, power:Complex) -> Complex = complex_exp(power * co
def complex_sqrt(x:Complex) -> Complex =
m = complex_mag x
- Complex (sqrt ((x.re + m) / 2.0)) (sign x.im * sqrt ((m - x.re) / 2.0))
+ sgn = if x.im >= 0 then 1.0 else -1.0
+ Complex (sqrt ((x.re + m) / 2.0)) (sgn * sqrt ((m - x.re) / 2.0))
def complex_sin( x:Complex) -> Complex = Complex(sin x.re * cosh x.im, cos x.re * sinh x.im)
def complex_sinh(x:Complex) -> Complex = Complex(sinh x.re * cos x.im, cosh x.re * sin x.im)
diff --git a/tests/complex-tests.dx b/tests/complex-tests.dx
index 42d7a858..c1ec03d6 100644
--- a/tests/complex-tests.dx
+++ b/tests/complex-tests.dx
@@ -34,6 +34,8 @@ b = Complex (-1.1) 1.3
> True
:p sqrt (sq a) ~~ a
> True
+:p sqrt (Complex (-1.0) 0.0) ~~ (Complex 0.0 1.0)
+> True
:p log ((Complex 1.0 0.0) + a) ~~ log1p a
> True
:p sin (-a) ~~ (-(sin a))