Annotation of researchv9/libc/math/sinh.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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