/**
 * 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
   2004-12-24
*/


#include <math.h>
#include <complex.h>
#include <errno.h>

/*
  ctanh (x + I * y) = (sinh (2 * x)  +  sin (2 * y) * I )
		     / (cosh (2 * x) + cos (2 * y)) .
*/

float complex
ctanhf (float complex Z)
{
  float complex Res;
  float two_R = 2.0f * __real__ Z;
  float two_I = 2.0f * __imag__ Z;
  float denom = coshf (two_R) + cosf (two_I);

  if (denom == 0.0f)
    {
      errno = ERANGE;
      __real__ Res = HUGE_VALF;
      __imag__ Res = HUGE_VALF;
    }
  else if (isinf (denom))
    {
      errno = ERANGE;
      __real__ Res = two_R > 0 ? 1.0f : -1.0f;
      __imag__ Res = 0.0f;
    }
  else
    {
      __real__ Res = sinhf (two_R) / denom;
      __imag__ Res = sinf (two_I) / denom;
    }
  return Res;
}
