/* sinh.c
*
* Hyperbolic sine
*
*
*
* SYNOPSIS :
*
* double x , y , sinh ( ) ;
*
* y = sinh ( x ) ;
*
*
*
* DESCRIPTION :
*
* Returns hyperbolic sine of argument in the range MINLOG to
* MAXLOG .
*
* The range is partitioned into two segments . If | x | < = 1 , a
* rational function of the form x + x * * 3 P ( x ) / Q ( x ) is employed .
* Otherwise the calculation is sinh ( x ) = ( exp ( x ) - exp ( - x ) ) / 2 .
*
*
*
* ACCURACY :
*
* Relative error :
* arithmetic domain # trials peak rms
* DEC + - 88 50000 4 . 0 e - 17 7 . 7 e - 18
* IEEE + - MAXLOG 30000 2 . 6 e - 16 5 . 7 e - 17
*
*/
/*
Cephes Math Library Release 2 . 8 : June , 2000
Copyright 1984 , 1995 , 2000 by Stephen L . Moshier
*/
#include "mconf.h"
#ifdef UNK
static double P[] = {
-7 .89474443963537015605 E-1 ,
-1 .63725857525983828727 E2,
-1 .15614435765005216044 E4,
-3 .51754964808151394800 E5
};
static double Q[] = {
/* 1.00000000000000000000E0,*/
-2 .77711081420602794433 E2,
3 .61578279834431989373 E4,
-2 .11052978884890840399 E6
};
#endif
#ifdef DEC
static unsigned short P[] = {
0140112 ,0015377 ,0042731 ,0163255 ,
0142043 ,0134721 ,0146177 ,0123761 ,
0143464 ,0122706 ,0034353 ,0006017 ,
0144653 ,0140536 ,0157665 ,0054045
};
static unsigned short Q[] = {
/*0040200,0000000,0000000,0000000,*/
0142212 ,0155404 ,0133513 ,0022040 ,
0044015 ,0036723 ,0173271 ,0011053 ,
0145400 ,0150407 ,0023710 ,0001034
};
#endif
#ifdef IBMPC
static unsigned short P[] = {
0 x3cd6,0 xe8bb,0 x435f,0 xbfe9,
0 xf4fe,0 x398f,0 x773a,0 xc064,
0 x6182,0 xc71d,0 x94b8,0 xc0c6,
0 xab05,0 xdbf6,0 x782b,0 xc115
};
static unsigned short Q[] = {
/*0x0000,0x0000,0x0000,0x3ff0,*/
0 x6484,0 x96e9,0 x5b60,0 xc071,
0 x2245,0 x7ed7,0 xa7ba,0 x40e1,
0 x0044,0 xe4f9,0 x1a20,0 xc140
};
#endif
#ifdef MIEEE
static unsigned short P[] = {
0 xbfe9,0 x435f,0 xe8bb,0 x3cd6,
0 xc064,0 x773a,0 x398f,0 xf4fe,
0 xc0c6,0 x94b8,0 xc71d,0 x6182,
0 xc115,0 x782b,0 xdbf6,0 xab05
};
static unsigned short Q[] = {
0 xc071,0 x5b60,0 x96e9,0 x6484,
0 x40e1,0 xa7ba,0 x7ed7,0 x2245,
0 xc140,0 x1a20,0 xe4f9,0 x0044
};
#endif
#ifdef ANSIPROT
extern double fabs ( double );
extern double exp ( double );
extern double polevl ( double , void *, int );
extern double p1evl ( double , void *, int );
#else
double fabs(), exp(), polevl(), p1evl();
#endif
extern double INFINITY, MINLOG, MAXLOG, LOGE2;
double sinh(x)
double x;
{
double a;
#ifdef MINUSZERO
if ( x == 0 .0 )
return (x);
#endif
a = fabs(x);
if ( (x > (MAXLOG + LOGE2)) || (x > -(MINLOG-LOGE2) ) )
{
mtherr( "sinh" , DOMAIN );
if ( x > 0 )
return ( INFINITY );
else
return ( -INFINITY );
}
if ( a > 1 .0 )
{
if ( a >= (MAXLOG - LOGE2) )
{
a = exp(0 .5 *a);
a = (0 .5 * a) * a;
if ( x < 0 )
a = -a;
return (a);
}
a = exp(a);
a = 0 .5 *a - (0 .5 /a);
if ( x < 0 )
a = -a;
return (a);
}
a *= a;
return ( x + x * a * (polevl(a,P,3 )/p1evl(a,Q,3 )) );
}
Messung V0.5 in Prozent C=97 H=100 G=98
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-17)
¤
*© Formatika GbR, Deutschland