Annotation of coherent/a/usr/lib/lib.b, revision 1.1

1.1     ! root        1: /*
        !             2:  * Definition of pi.
        !             3:  * Used for large signs and funny
        !             4:  * arctangents.
        !             5:  */
        !             6: pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798
        !             7: 
        !             8: /*
        !             9:  * exp(x) -- exponential function
        !            10:  * to the scale that is in effect
        !            11:  * at the time of the call.
        !            12:  */
        !            13: define exp(x) {
        !            14:        auto i, num, den, term, result;
        !            15: 
        !            16:        num = den = result = 1;
        !            17:        for (i=1; ; i++) {
        !            18:                num *= x;
        !            19:                den *= i;
        !            20:                if ((term = num/den) == 0)      return (result);
        !            21:                result += term;
        !            22:        }
        !            23: }
        !            24: 
        !            25: /*
        !            26:  * ln(x) -- natural logarithm
        !            27:  */
        !            28: define ln(x) {
        !            29:        auto i, xp1, xm1, num, den, term, result;
        !            30: 
        !            31:        if (x <= 0)     return (0);
        !            32:        xp1 = x+1;
        !            33:        xm1 = x-1;
        !            34:        num = 2*xm1;
        !            35:        den = xp1;
        !            36:        result = num/den;
        !            37:        for (i=3; ; i+=2) {
        !            38:                num *= xm1*xm1;
        !            39:                den *= xp1*xp1;
        !            40:                if ((term = num/(i*den)) == 0)  return (result);
        !            41:                result += term;
        !            42:        }
        !            43: }
        !            44: 
        !            45: /*
        !            46:  * sin(x) -- sine function.
        !            47:  */
        !            48: define sin(x) {
        !            49:        auto i, num, den, term, result, sign, pi2, minusx2;
        !            50: 
        !            51:        sign = den = 1;
        !            52:        pi2 = 2*pi;
        !            53:        if (x < 0) {
        !            54:                sign = -1;
        !            55:                x = -x;
        !            56:        }
        !            57:        while (x > pi2)         x -= pi2;
        !            58:        num = result = x;
        !            59:        minusx2 = -x*x;
        !            60:        for (i=3; ; i+=2) {
        !            61:                num *= minusx2;
        !            62:                den *= (i-1)*i;
        !            63:                if ((term = num/den) == 0)      return (sign*result);
        !            64:                result += term;
        !            65:        }
        !            66: }
        !            67: 
        !            68: /*
        !            69:  * cos(x) -- cosine function.
        !            70:  */
        !            71: define cos(x) {
        !            72:        auto i, num, den, term, result, pi2, minusx2;
        !            73: 
        !            74:        pi2 = 2*pi;
        !            75:        if (x < 0)      x = -x;
        !            76:        while (x > pi2)         x -= pi2;
        !            77:        num = den = result = 1;
        !            78:        minusx2 = -x*x;
        !            79:        for (i=2; ; i+=2) {
        !            80:                num *= minusx2;
        !            81:                den *= i*(i-1);
        !            82:                if ((term = num/den) == 0)      return (result);
        !            83:                result += term;
        !            84:        }
        !            85: }
        !            86: 
        !            87: /*
        !            88:  * atan(x) -- arctangent function of x
        !            89:  */
        !            90: define atan(x) {
        !            91:        auto i, sign, inverse, num, den, term, x2, x2p1, result;
        !            92: 
        !            93:        sign = 1;
        !            94:        inverse = 0;
        !            95:        if (x < 0) {
        !            96:                sign = -1;
        !            97:                x = -x;
        !            98:        }
        !            99:        if (x > 1) {
        !           100:                inverse = 1;
        !           101:                x = 1/x;
        !           102:        }
        !           103:        x2 = x*x;
        !           104:        x2p1 = x2+1;
        !           105:        result = num = den = 1;
        !           106:        for (i=2; ; i+=2) {
        !           107:                num *= x2*i;
        !           108:                den *= x2p1*(i+1);
        !           109:                if ((term = num/den) == 0) {
        !           110:                        result = x*result/x2p1;
        !           111:                        if (inverse != 0)       result = pi/2 - result;
        !           112:                        return (sign * result);
        !           113:                }
        !           114:                result += term;
        !           115:        }
        !           116: }
        !           117: 
        !           118: /*
        !           119:  * Bessel functions of first kind of
        !           120:  * integer order `n' for `x'.
        !           121:  */
        !           122: define j(n, x)
        !           123: {
        !           124:        auto i, num, den, result;
        !           125: 
        !           126:        if (n%1 != 0)   return (0);
        !           127:        den = 2;
        !           128:        num = 1;
        !           129:        if (n > 0) {
        !           130:                for (i=0; i<n; i++)     num *= x;
        !           131:        } else if (n < 0) {
        !           132:                for (i=0; i<-n; i++)    den *= x;
        !           133:        }
        !           134:        return (0);
        !           135: }

unix.superglobalmegacorp.com

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