summaryrefslogtreecommitdiff
path: root/lib/libm/casin.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libm/casin.c')
-rw-r--r--lib/libm/casin.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/libm/casin.c b/lib/libm/casin.c
new file mode 100644
index 00000000..e23cdd15
--- /dev/null
+++ b/lib/libm/casin.c
@@ -0,0 +1,23 @@
+#include <complex.h>
+
+double complex casin(double complex z)
+{
+ double complex ca, ct, zz, z2;
+ double x, y;
+
+ x = creal(z);
+ y = cimag(z);
+
+ ca = x + y * I;
+ ct = ca * I;
+
+ zz = (x - y) * (x + y) + (2.0 * x * y) * I;
+
+ zz = 1.0 - creal(zz) - cimag(zz) * I;
+ z2 = csqrt(zz);
+
+ zz = ct + z2;
+ zz = clog(zz);
+
+ return zz * (-1.0 * I);
+}