__complex__ double __ctanh (__complex__ double x) { __complex__ double res; if (__builtin_expect (!isfinite (__real__ x) || !isfinite (__imag__ x), 0)) { if (__isinf_ns (__real__ x)) { __real__ res = __copysign (1.0, __real__ x); __imag__ res = __copysign (0.0, __imag__ x); } else if (__imag__ x == 0.0) { res = x; } else { __real__ res = __nan (""); __imag__ res = __nan (""); if (__isinf_ns (__imag__ x)) feraiseexcept (FE_INVALID); } } else { double sin2ix, cos2ix; double den; __sincos (2.0 * __imag__ x, &sin2ix, &cos2ix); den = (__ieee754_cosh (2.0 * __real__ x) + cos2ix); if (den == 0.0) { __complex__ double ez = __cexp (x); __complex__ double emz = __cexp (-x); res = (ez - emz) / (ez + emz); } else { __real__ res = __ieee754_sinh (2.0 * __real__ x) / den; __imag__ res = sin2ix / den; } } return res; }
__complex__ double __cpow (__complex__ double x, __complex__ double c) { return __cexp (c * __clog (x)); }
complex c_exp_(complex *z) { return __cexp(z->real, z->imag); }