Annotation of researchv10dc/libc/math/exp.c, revision 1.1

1.1     ! root        1: /*
        !             2:        exp returns the exponential function of its
        !             3:        floating-point argument.
        !             4: 
        !             5:        The coefficients are #1069 from Hart and Cheney. (22.35D)
        !             6: */
        !             7: 
        !             8: #include <errno.h>
        !             9: #include <math.h>
        !            10: 
        !            11: int    errno;
        !            12: static double  p0      = .2080384346694663001443843411e7;
        !            13: static double  p1      = .3028697169744036299076048876e5;
        !            14: static double  p2      = .6061485330061080841615584556e2;
        !            15: static double  q0      = .6002720360238832528230907598e7;
        !            16: static double  q1      = .3277251518082914423057964422e6;
        !            17: static double  q2      = .1749287689093076403844945335e4;
        !            18: static double  log2e   = 1.4426950408889634073599247;
        !            19: static double  sqrt2   = 1.4142135623730950488016887;
        !            20: static double  maxf    = 10000;
        !            21: 
        !            22: double
        !            23: exp(arg)
        !            24: double arg;
        !            25: {
        !            26:        double fract;
        !            27:        double temp1, temp2, xsq;
        !            28:        int ent;
        !            29: 
        !            30:        if(arg == 0.)
        !            31:                return(1.);
        !            32:        if(arg < -maxf)
        !            33:                return(0.);
        !            34:        if(arg > maxf) {
        !            35:                errno = ERANGE;
        !            36:                return(HUGE);
        !            37:        }
        !            38:        arg *= log2e;
        !            39:        ent = floor(arg);
        !            40:        fract = (arg-ent) - 0.5;
        !            41:        xsq = fract*fract;
        !            42:        temp1 = ((p2*xsq+p1)*xsq+p0)*fract;
        !            43:        temp2 = ((1.0*xsq+q2)*xsq+q1)*xsq + q0;
        !            44:        return(ldexp(sqrt2*(temp2+temp1)/(temp2-temp1), ent));
        !            45: }

unix.superglobalmegacorp.com

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