/*
* Copyright ( c ) 1998 , 2001 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation . Oracle designates this
* particular file as subject to the " Classpath " exception as provided
* by Oracle in the LICENSE file that accompanied this code .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/* __ieee754_cosh(x)
* Method :
* mathematically cosh ( x ) if defined to be ( exp ( x ) + exp ( - x ) ) / 2
* 1 . Replace x by | x | ( cosh ( x ) = cosh ( - x ) ) .
* 2 .
* [ exp ( x ) - 1 ] ^ 2
* 0 < = x < = ln2 / 2 : cosh ( x ) : = 1 + - - - - - - - - - - - - - - - - - - -
* 2 * exp ( x )
*
* exp ( x ) + 1 / exp ( x )
* ln2 / 2 < = x < = 22 : cosh ( x ) : = - - - - - - - - - - - - - - - - - - -
* 2
* 22 < = x < = lnovft : cosh ( x ) : = exp ( x ) / 2
* lnovft < = x < = ln2ovft : cosh ( x ) : = exp ( x / 2 ) / 2 * exp ( x / 2 )
* ln2ovft < x : cosh ( x ) : = huge * huge ( overflow )
*
* Special cases :
* cosh ( x ) is | x | if x is + INF , - INF , or NaN .
* only cosh ( 0 ) = 1 is exact for finite x .
*/
#include "fdlibm.h"
#ifdef __STDC__
static const double one = 1 .0 , half=0 .5 , huge = 1 .0 e300;
#else
static double one = 1 .0 , half=0 .5 , huge = 1 .0 e300;
#endif
#ifdef __STDC__
double __ieee754_cosh(double x)
#else
double __ieee754_cosh(x)
double x;
#endif
{
double t,w;
int ix;
unsigned lx;
/* High word of |x|. */
ix = __HI(x);
ix &= 0 x7fffffff;
/* x is INF or NaN */
if (ix>=0 x7ff00000) return x*x;
/* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */
if (ix<0 x3fd62e43) {
t = expm1(fabs(x));
w = one+t;
if (ix<0 x3c800000) return w; /* cosh(tiny) = 1 */
return one+(t*t)/(w+w);
}
/* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */
if (ix < 0 x40360000) {
t = __ieee754_exp(fabs(x));
return half*t+half/t;
}
/* |x| in [22, log(maxdouble)] return half*exp(|x|) */
if (ix < 0 x40862E42) return half*__ieee754_exp(fabs(x));
/* |x| in [log(maxdouble), overflowthresold] */
lx = *( (((*(unsigned *)&one)>>29 )) + (unsigned *)&x);
if (ix<0 x408633CE ||
((ix==0 x408633ce)&&(lx<=(unsigned )0 x8fb9f87d))) {
w = __ieee754_exp(half*fabs(x));
t = half*w;
return t*w;
}
/* |x| > overflowthresold, cosh(x) overflow */
return huge*huge;
}
Messung V0.5 in Prozent C=91 H=100 G=95
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-09-30)
¤
*© Formatika GbR, Deutschland