__complex__ double ccosh (__complex__ double x) { __complex__ double retval; if (FINITE_P (__real__ x)) { /* Real part is finite. */ if (FINITE_P (__imag__ x)) { /* Imaginary part is finite. */ double sinh_val = sinh (__real__ x); double cosh_val = cosh (__real__ x); double sinix = sin (__imag__ x); double cosix = cos (__imag__ x); __real__ retval = cosh_val * cosix; __imag__ retval = sinh_val * sinix; } else { __imag__ retval = __real__ x == 0.0 ? 0.0 : NAN; __real__ retval = NAN + NAN; } } else if (INFINITE_P (__real__ x)) { /* Real part is infinite. */ if (__imag__ x == 0.0) { /* Imaginary part is 0.0. */ __real__ retval = HUGE_VAL; __imag__ retval = __imag__ x * copysign (1.0, __real__ x); } else if (FINITE_P (__imag__ x)) { /* Imaginary part is finite. */ double sinix = sin (__imag__ x); double cosix = cos (__imag__ x); __real__ retval = copysign (HUGE_VAL, cosix); __imag__ retval = (copysign (HUGE_VAL, sinix) * copysign (1.0, __real__ x)); } else { /* The addition raises the invalid exception. */ __real__ retval = HUGE_VAL; __imag__ retval = NAN + NAN; } } else { __real__ retval = NAN; __imag__ retval = __imag__ x == 0.0 ? __imag__ x : NAN; } return retval; }
__complex__ double ctan (__complex__ double x) { __complex__ double res; if (!FINITE_P (__real__ x) || !FINITE_P (__imag__ x)) { if (INFINITE_P (__imag__ x)) { __real__ res = copysign (0.0, __real__ x); __imag__ res = copysign (1.0, __imag__ x); } else if (__real__ x == 0.0) { res = x; } else { __real__ res = NAN; __imag__ res = NAN; } } else { double sin2rx = sin (2.0 * __real__ x); double cos2rx = cos (2.0 * __real__ x); double den; den = cos2rx + cosh (2.0 * __imag__ x); __real__ res = sin2rx / den; __imag__ res = sinh (2.0 * __imag__ x) / den; } return res; }