master
 1/**
 2 * This file has no copyright assigned and is placed in the Public Domain.
 3 * This file is part of the mingw-w64 runtime package.
 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 5 */
 6#include "cephes_mconf.h"
 7
 8#if __SIZEOF_LONG_DOUBLE__ == __SIZEOF_DOUBLE__
 9#include <math.h>
10
11long double coshl(long double x)
12{
13  return cosh(x);
14}
15#else
16
17#ifndef _SET_ERRNO
18#define _SET_ERRNO(x)
19#endif
20
21long double coshl(long double x)
22{
23  long double y;
24  int x_class = fpclassify (x);
25  if (x_class == FP_NAN)
26    {
27      errno = EDOM;
28      return x;
29    }
30  else if (x_class == FP_INFINITE)
31    {
32       errno = ERANGE;
33       return INFINITY;
34    }
35  x = fabsl (x);
36  if (x > (MAXLOGL + LOGE2L))
37    {
38      errno = ERANGE;
39#ifdef INFINITIES
40      return (INFINITYL);
41#else
42      return (MAXNUML);
43#endif
44    }
45  if (x >= (MAXLOGL - LOGE2L))
46    {
47      y = expl(0.5L * x);
48      y = (0.5L * y) * y;
49      return y;
50    }
51  y = expl(x);
52  y = 0.5L * (y + 1.0L / y);
53  return y;
54}
55#endif