| /** |
| * This file has no copyright assigned and is placed in the Public Domain. |
| * This file is part of the mingw-w64 runtime package. |
| * No warranty is given; refer to the file DISCLAIMER.PD within this package. |
| */ |
| #include "cephes_mconf.h" |
| |
| #if defined(_ARM_) || defined(__arm__) || defined(_ARM64_) || defined(__aarch64__) |
| #include <math.h> |
| |
| long double coshl(long double x) |
| { |
| return cosh(x); |
| } |
| #else |
| |
| #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 INFINITY; |
| } |
| 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; |
| } |
| #endif |