Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/mingwex/math/coshl.c')
-rw-r--r--winsup/mingw/mingwex/math/coshl.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/winsup/mingw/mingwex/math/coshl.c b/winsup/mingw/mingwex/math/coshl.c
new file mode 100644
index 000000000..c698e50c0
--- /dev/null
+++ b/winsup/mingw/mingwex/math/coshl.c
@@ -0,0 +1,110 @@
+/* coshl.c
+ *
+ * Hyperbolic cosine, long double precision
+ *
+ *
+ *
+ * SYNOPSIS:
+ *
+ * long double x, y, coshl();
+ *
+ * y = coshl( x );
+ *
+ *
+ *
+ * DESCRIPTION:
+ *
+ * Returns hyperbolic cosine of argument in the range MINLOGL to
+ * MAXLOGL.
+ *
+ * cosh(x) = ( exp(x) + exp(-x) )/2.
+ *
+ *
+ *
+ * ACCURACY:
+ *
+ * Relative error:
+ * arithmetic domain # trials peak rms
+ * IEEE +-10000 30000 1.1e-19 2.8e-20
+ *
+ *
+ * ERROR MESSAGES:
+ *
+ * message condition value returned
+ * cosh overflow |x| > MAXLOGL+LOGE2L INFINITYL
+ *
+ *
+ */
+
+
+/*
+Cephes Math Library Release 2.7: May, 1998
+Copyright 1985, 1991, 1998 by Stephen L. Moshier
+*/
+
+/*
+Modified for mingw
+2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
+*/
+
+#ifdef __MINGW32__
+#include "cephes_mconf.h"
+#else
+#include "mconf.h"
+#endif
+
+#ifndef _SET_ERRNO
+#define _SET_ERRNO(x)
+#endif
+
+
+#ifndef __MINGW32__
+extern long double MAXLOGL, MAXNUML, LOGE2L;
+#ifdef ANSIPROT
+extern long double expl ( long double );
+extern int isnanl ( long double );
+#else
+long double expl(), isnanl();
+#endif
+#ifdef INFINITIES
+extern long double INFINITYL;
+#endif
+#ifdef NANS
+extern long double NANL;
+#endif
+#endif /* __MINGW32__ */
+
+long double coshl(x)
+long double x;
+{
+long double y;
+
+#ifdef NANS
+if( isnanl(x) )
+ {
+ _SET_ERRNO(EDOM);
+ return(x);
+ }
+#endif
+if( x < 0 )
+ x = -x;
+if( x > (MAXLOGL + LOGE2L) )
+ {
+ mtherr( "coshl", OVERFLOW );
+ _SET_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 );
+}