summaryrefslogtreecommitdiff
path: root/lib/libm/casin.c
blob: e23cdd152beedf0aa32a281819c536b9e137eebb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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);
}