/** | |
* 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" | |
#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; | |
} |