Annotation of 3BSD/libF77/sinh.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.