Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/mingwex/complex/casinf.c')
-rwxr-xr-xwinsup/mingw/mingwex/complex/casinf.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/complex/casinf.c b/winsup/mingw/mingwex/complex/casinf.c
new file mode 100755
index 000000000..a70058b0c
--- /dev/null
+++ b/winsup/mingw/mingwex/complex/casinf.c
@@ -0,0 +1,48 @@
+/*
+ casinf.c
+ Contributed by Danny Smith
+ 2004-12-24
+*/
+
+#include <math.h>
+#include <complex.h>
+
+/* casin (Z ) = -I * clog(I * Z + csqrt (1.0 - Z * Z))) */
+
+float complex casinf (float complex Z)
+{
+ float complex Res;
+ float x, y;
+
+ x = __real__ Z;
+ y = __imag__ Z;
+
+ if (y == 0.0f)
+ {
+ __real__ Res = asinf (x);
+ __imag__ Res = 0.0f;
+ }
+ else /* -I * clog(I * Z + csqrt(1.0 - Z * Z))) */
+ {
+ float complex ZZ;
+
+ /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
+ /* calculate 1 - Z * Z */
+ __real__ ZZ = 1.0f - (x - y) * (x + y);
+ __imag__ ZZ = -2.0f * x * y;
+ ZZ = csqrtf (ZZ);
+
+
+ /* add I * Z to ZZ */
+
+ __real__ ZZ -= y;
+ __imag__ ZZ += x;
+
+ ZZ = clogf (ZZ);
+
+ /* mult by -I */
+ __real__ Res = __imag__ ZZ;
+ __imag__ Res = - __real__ ZZ;
+ }
+ return (Res);
+}