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