aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2024-04-13 20:41:37 +0200
committerMarvin Borner2024-04-13 20:43:31 +0200
commit97b55f035d883cb1d0985c6f3f64c9490dd17bb9 (patch)
tree47ba58e68275236c184f8f0ae511d344eb4b5c58
parentb1062132fc1c2f3fb3b925fb42acc5de7a33f6d3 (diff)
Started complex numbers
-rw-r--r--std/Math/Complex.bruijn32
1 files changed, 32 insertions, 0 deletions
diff --git a/std/Math/Complex.bruijn b/std/Math/Complex.bruijn
new file mode 100644
index 0000000..f40f876
--- /dev/null
+++ b/std/Math/Complex.bruijn
@@ -0,0 +1,32 @@
+# ideas by u/DaVinci103
+# MIT License, Copyright (c) 2024 Marvin Borner
+
+:import std/Combinator .
+:import std/Pair .
+:import std/Math/Real R
+
+ι (+0.0r) : (+1.0r)
+
+# adds two complex numbers
+add &[[&[[(R.add 3 1) : (R.add 2 0)]]]] ⧗ Complex → Complex → Complex
+
+# subtracts two complex numbers
+sub &[[&[[(R.sub 3 1) : (R.sub 2 0)]]]] ⧗ Complex → Complex → Complex
+
+# multiplies two complex numbers
+mul &[[&[[p : q]]]] ⧗ Complex → Complex → Complex
+ p R.sub (R.mul 3 1) (R.mul 2 0)
+ q R.add (R.mul 3 0) (R.mul 2 1)
+
+# divides two complex numbers
+div &[[&[[p : q]]]] ⧗ Complex → Complex → Complex
+ p R.div (R.add (R.mul 3 1) (R.mul 2 0)) (R.add (R.mul 1 1) (R.mul 0 0))
+ q R.div (R.sub (R.mul 2 1) (R.mul 1 0)) (R.add (R.mul 1 1) (R.mul 0 0))
+
+# negates a complex number
+negate &[[(R.negate 1) : (R.negate 0)]] ⧗ Complex → Complex
+
+# inverts a complex number
+invert &[[p : q]]
+ p R.div 1 (R.add (R.mul 1 1) (R.mul 0 0))
+ q R.div 0 (R.add (R.mul 1 1) (R.mul 0 0))