summaryrefslogtreecommitdiff
path: root/lib/libm/casinf.c
blob: 797ea94b6f48cbb5d5e17f0049af700aa2e82b54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <complex.h> // for I, cimagf, crealf, complex, casinf, clogf, csqrtf

float complex casinf(float complex z)
{
	float complex ca, ct, zz, z2;
	float x, y;

	x = crealf(z);
	y = cimagf(z);
	ca = x + y * I;
	ct = ca * I;
	zz = (x - y) * (x + y) + (2.0f * x * y) * I;

	zz = 1.0f - crealf(zz) - cimagf(zz) * I;
	z2 = csqrtf(zz);

	zz = ct + z2;
	zz = clogf(zz);

	return zz * (-1.0f * I);
}