Example #1
0
__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;
}
Example #2
0
__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;
}