/**
 * 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.PD within this package.
 */
#include "cephes_mconf.h"

#ifndef _SET_ERRNO
#define _SET_ERRNO(x)
#endif

long double coshl(long double x)
{
  long double y;
  int x_class = fpclassify (x);
  if (x_class == FP_NAN)
    {
      errno = EDOM;
      return x;
    }
  else if (x_class == FP_INFINITE)
    {
       errno = ERANGE;
       return x;
    }
  x = fabsl (x);
  if (x > (MAXLOGL + LOGE2L))
    {
      errno = ERANGE;
#ifdef INFINITIES
      return (INFINITYL);
#else
      return (MAXNUML);
#endif
    }
  if (x >= (MAXLOGL - LOGE2L))
    {
      y = expl(0.5L * x);
      y = (0.5L * y) * y;
      return y;
    }
  y = expl(x);
  y = 0.5L * (y + 1.0L / y);
  return y;
}
