|
|
1.1 root 1: #include <errno.h>
2: /*
3: sinh(arg) returns the hyperbolic sine of its floating-
4: point argument.
5:
6: The exponential function is called for arguments
7: greater in magnitude than 0.5.
8:
9: A series is used for arguments smaller in magnitude than 0.5.
10: The coefficients are #2029 from Hart & Cheney. (20.36D)
11:
12: cosh(arg) is computed from the exponential function for
13: all arguments.
14: */
15:
16: double exp();
17:
18: static double p0 = -0.6307673640497716991184787251e+6;
19: static double p1 = -0.8991272022039509355398013511e+5;
20: static double p2 = -0.2894211355989563807284660366e+4;
21: static double p3 = -0.2630563213397497062819489e+2;
22: static double q0 = -0.6307673640497716991212077277e+6;
23: static double q1 = 0.1521517378790019070696485176e+5;
24: static double q2 = -0.173678953558233699533450911e+3;
25:
26: double
27: sinh(arg)
28: double arg;
29: {
30: double temp, argsq;
31: register sign;
32:
33: sign = 1;
34: if(arg < 0) {
35: arg = - arg;
36: sign = -1;
37: }
38:
39: if(arg > 21.) {
40: errno = EDOM;
41: temp = exp(arg)/2;
42: if (sign>0)
43: return(temp);
44: else
45: return(-temp);
46: }
47:
48: if(arg > 0.5) {
49: return(sign*(exp(arg) - exp(-arg))/2);
50: }
51:
52: argsq = arg*arg;
53: temp = (((p3*argsq+p2)*argsq+p1)*argsq+p0)*arg;
54: temp /= (((argsq+q2)*argsq+q1)*argsq+q0);
55: return(sign*temp);
56: }
57:
58: double
59: cosh(arg)
60: double arg;
61: {
62: if(arg < 0)
63: arg = - arg;
64: if(arg > 21.) {
65: errno = EDOM;
66: return(exp(arg)/2);
67: }
68:
69: return((exp(arg) + exp(-arg))/2);
70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.