1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <complex.h>
22: #include <math.h>
23:
24:
25: __complex__ float
26: __casinhf (__complex__ float x)
27: {
28: __complex__ float res;
29: int rcls = fpclassify (__real__ x);
30: int icls = fpclassify (__imag__ x);
31:
32: if (rcls <= FP_INFINITE || icls <= FP_INFINITE)
33: {
34: if (icls == FP_INFINITE)
35: {
36: __real__ res = __copysignf (HUGE_VALF, __real__ x);
37:
38: if (rcls == FP_NAN)
39: __imag__ res = __nanf ("");
40: else
41: __imag__ res = __copysignf (rcls >= FP_ZERO ? M_PI_2 : M_PI_4,
42: __imag__ x);
43: }
44: else if (rcls <= FP_INFINITE)
45: {
46: __real__ res = __real__ x;
47: if ((rcls == FP_INFINITE && icls >= FP_ZERO)
48: || (rcls == FP_NAN && icls == FP_ZERO))
49: __imag__ res = __copysignf (0.0, __imag__ x);
50: else
51: __imag__ res = __nanf ("");
52: }
53: else
54: {
55: __real__ res = __nanf ("");
56: __imag__ res = __nanf ("");
57: }
58: }
59: else if (rcls == FP_ZERO && icls == FP_ZERO)
60: {
61: res = x;
62: }
63: else
64: {
65: __complex__ float y;
66:
67: __real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) + 1.0;
68: __imag__ y = 2.0 * __real__ x * __imag__ x;
69:
70: y = __csqrtf (y);
71:
72: __real__ y += __real__ x;
73: __imag__ y += __imag__ x;
74:
75: res = __clogf (y);
76: }
77:
78: return res;
79: }
80: #ifndef __casinhf
81: weak_alias (__casinhf, casinhf)
82: #endif