/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
/*
   Contributed by Danny Smith
   2003-10-20
*/

#include <math.h>
#include <complex.h>
#include <errno.h>


/* ctan (x + I * y) = (sin (2 * x)  +  I * sinh(2 * y))
		      / (cos (2 * x)  +  cosh (2 * y)) */

double complex ctan (double complex Z)
{
  double complex Res;
  double two_I = 2.0 * __imag__ Z;
  double two_R = 2.0 * __real__ Z;
  double denom = cos (two_R) + cosh (two_I);
  if (denom == 0.0)
    {
      errno = ERANGE;
      __real__ Res = HUGE_VAL;
      __imag__ Res = HUGE_VAL;
    }
  else if (isinf (denom))
    {
      errno = ERANGE;
      __real__ Res = 0.0;
      __imag__ Res = two_I > 0 ? 1.0 : -1.0;
    }
  else
    {
      __real__ Res = sin (two_R) / denom;
      __imag__ Res = sinh (two_I) / denom;
    }
  return Res;
}

