Annotation of 43BSD/contrib/icon/pifuncs/trig.c, revision 1.1

1.1     ! root        1: /*
        !             2: #      TRIG(3.icon)
        !             3: #
        !             4: #      Trigonometric functions
        !             5: #
        !             6: #      Ralph E. Griswold and Stephen B. Wampler
        !             7: #
        !             8: #      Last modified 8/19/84
        !             9: #
        !            10: */
        !            11: 
        !            12: #include "../h/rt.h"
        !            13: #include <errno.h>
        !            14: 
        !            15: int errno;
        !            16: 
        !            17: /*
        !            18:  * sin(x), x in radians
        !            19:  */
        !            20: Xsin(nargs, arg1, arg0)
        !            21: int nargs;
        !            22: struct descrip arg1, arg0;
        !            23:    {
        !            24:    int t;
        !            25:    union numeric r;
        !            26:    double sin();
        !            27:    
        !            28:    if ((t = cvreal(&arg1, &r)) == NULL) runerr(102, &arg1);
        !            29:    mkreal(sin(r.real),&arg0);
        !            30:    }
        !            31: Procblock(sin,1)
        !            32: 
        !            33: /*
        !            34:  * cos(x), x in radians
        !            35:  */
        !            36: Xcos(nargs, arg1, arg0)
        !            37: int nargs;
        !            38: struct descrip arg1, arg0;
        !            39:    {
        !            40:    int t;
        !            41:    union numeric r;
        !            42:    double cos();
        !            43:    
        !            44:    if ((t = cvreal(&arg1, &r)) == NULL) runerr(102, &arg1);
        !            45:    mkreal(cos(r.real),&arg0);
        !            46:    }
        !            47: Procblock(cos,1)
        !            48: 
        !            49: /*
        !            50:  * tan(x), x in radians
        !            51:  */
        !            52: Xtan(nargs, arg1, arg0)
        !            53: int nargs;
        !            54: struct descrip arg1, arg0;
        !            55:    {
        !            56:    int t;
        !            57:    double y;
        !            58:    union numeric r;
        !            59:    double tan();
        !            60:    
        !            61:    if ((t = cvreal(&arg1, &r)) == NULL) runerr(102, &arg1);
        !            62:    y = tan(r.real);
        !            63:    if (errno == ERANGE) runerr(252, NULL);
        !            64:    mkreal(y,&arg0);
        !            65:    }
        !            66: Procblock(tan,1)
        !            67: 
        !            68: /*
        !            69:  * acos(x), x in radians
        !            70:  */
        !            71: Xacos(nargs, arg1, arg0)
        !            72: int nargs;
        !            73: struct descrip arg1, arg0;
        !            74:    {
        !            75:    int t;
        !            76:    double y;
        !            77:    union numeric r;
        !            78:    double acos();
        !            79:    
        !            80:    if ((t = cvreal(&arg1, &r)) == NULL) runerr(102, &arg1);
        !            81:    y = acos(r.real);
        !            82:    if (errno == EDOM) runerr(251, NULL);
        !            83:    mkreal(y,&arg0);
        !            84:    }
        !            85: Procblock(acos,1)
        !            86: 
        !            87: /*
        !            88:  * asin(x), x in radians
        !            89:  */
        !            90: Xasin(nargs, arg1, arg0)
        !            91: int nargs;
        !            92: struct descrip arg1, arg0;
        !            93:    {
        !            94:    int t;
        !            95:    double y;
        !            96:    union numeric r;
        !            97:    double asin();
        !            98:    
        !            99:    if ((t = cvreal(&arg1, &r)) == NULL) runerr(102, &arg1);
        !           100:    y = asin(r.real);
        !           101:    if (errno == EDOM) runerr(251, NULL);
        !           102:    mkreal(y,&arg0);
        !           103:    }
        !           104: Procblock(asin,1)
        !           105: 
        !           106: /*
        !           107:  * atan(x), x in radians
        !           108:  */
        !           109: Xatan(nargs, arg1, arg0)
        !           110: int nargs;
        !           111: struct descrip arg1, arg0;
        !           112:    {
        !           113:    int t;
        !           114:    union numeric r;
        !           115:    double atan();
        !           116:    
        !           117:    if ((t = cvreal(&arg1, &r)) == NULL) runerr(102, &arg1);
        !           118:    mkreal(atan(r.real),&arg0);
        !           119:    }
        !           120: struct b_iproc Batan = {
        !           121:    T_PROC,
        !           122:    sizeof(struct b_proc),
        !           123:    EntryPoint(Xatan),
        !           124:    1,
        !           125:    -1,
        !           126:    0,
        !           127:    0,
        !           128:    {4, "atan"}
        !           129:    };
        !           130: 
        !           131: /*
        !           132:  * atan2(x,y), x, y in radians
        !           133:  */
        !           134: Xatan2(nargs, arg2, arg1, arg0)
        !           135: int nargs;
        !           136: struct descrip arg2, arg1, arg0;
        !           137:    {
        !           138:    int t;
        !           139:    union numeric r1, r2;
        !           140:    double atan2();
        !           141: 
        !           142:    if ((t = cvreal(&arg2, &r2)) == NULL) runerr(102, &arg2);
        !           143:    if ((t = cvreal(&arg1, &r1)) == NULL) runerr(102, &arg1);
        !           144:    mkreal(atan2(r1.real,r2.real),&arg0);
        !           145:    }
        !           146: Procblock(atan2,2)
        !           147: 
        !           148: #define PI 3.14159
        !           149: 
        !           150: /*
        !           151:  * dtor(x), x in degrees
        !           152:  */
        !           153: Xdtor(nargs, arg1, arg0)
        !           154: int nargs;
        !           155: struct descrip arg1, arg0;
        !           156:    {
        !           157:    union numeric r;
        !           158: 
        !           159:    if (cvreal(&arg1, &r) == NULL) runerr(102, &arg1);
        !           160:    mkreal(r.real * PI / 180, &arg0);
        !           161:    }
        !           162: Procblock(dtor,1)
        !           163: 
        !           164: /*
        !           165:  * rtod(x), x in radians
        !           166:  */
        !           167: Xrtod(nargs, arg1, arg0)
        !           168: int nargs;
        !           169: struct descrip arg1, arg0;
        !           170:    {
        !           171:    union numeric r;
        !           172: 
        !           173:    if (cvreal(&arg1, &r) == NULL) runerr(102, &arg1);
        !           174:    mkreal(r.real * 180 / PI, &arg0);
        !           175:    }
        !           176: Procblock(rtod,1)

unix.superglobalmegacorp.com

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