Annotation of researchv10dc/cmd/icon/pi/pil/trig.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     TRIG
                      3:  *
                      4:  *     Trigonometric functions
                      5:  *
                      6:  *     Ralph E. Griswold and Stephen B. Wampler
                      7:  *
                      8:  *     Last modified 5/2/86 by Ralph E. Griswold
                      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: FncDcl(sin,1)
                     21:    {
                     22:    int t;
                     23:    union numeric r;
                     24:    double sin();
                     25:    
                     26:    if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
                     27:    mkreal(sin(r.real),&Arg0);
                     28:    Return;
                     29:    }
                     30: 
                     31: /*
                     32:  * cos(x), x in radians
                     33:  */
                     34: FncDcl(cos,1)
                     35:    {
                     36:    int t;
                     37:    union numeric r;
                     38:    double cos();
                     39:    
                     40:    if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
                     41:    mkreal(cos(r.real),&Arg0);
                     42:    Return;
                     43:    }
                     44: 
                     45: /*
                     46:  * tan(x), x in radians
                     47:  */
                     48: FncDcl(tan,1)
                     49:    {
                     50:    int t;
                     51:    double y;
                     52:    union numeric r;
                     53:    double tan();
                     54:    
                     55:    if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
                     56:    y = tan(r.real);
                     57:    if (errno == ERANGE) runerr(252, NULL);
                     58:    mkreal(y,&Arg0);
                     59:    Return;
                     60:    }
                     61: 
                     62: /*
                     63:  * acos(x), x in radians
                     64:  */
                     65: FncDcl(acos,1)
                     66:    {
                     67:    int t;
                     68:    double y;
                     69:    union numeric r;
                     70:    double acos();
                     71:    
                     72:    if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
                     73:    y = acos(r.real);
                     74:    if (errno == EDOM) runerr(251, NULL);
                     75:    mkreal(y,&Arg0);
                     76:    Return;
                     77:    }
                     78: 
                     79: /*
                     80:  * asin(x), x in radians
                     81:  */
                     82: FncDcl(asin,1)
                     83:    {
                     84:    int t;
                     85:    double y;
                     86:    union numeric r;
                     87:    double asin();
                     88:    
                     89:    if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
                     90:    y = asin(r.real);
                     91:    if (errno == EDOM) runerr(251, NULL);
                     92:    mkreal(y,&Arg0);
                     93:    Return;
                     94:    }
                     95: 
                     96: /*
                     97:  * atan(x), x in radians
                     98:  */
                     99: FncDcl(atan,1)
                    100:    {
                    101:    int t;
                    102:    union numeric r;
                    103:    double atan();
                    104:    
                    105:    if ((t = cvreal(&Arg1, &r)) == NULL) runerr(102, &Arg1);
                    106:    mkreal(atan(r.real),&Arg0);
                    107:    Return;
                    108:    }
                    109: 
                    110: /*
                    111:  * atan2(x,y), x, y in radians
                    112:  */
                    113: FncDcl(atan2,2)
                    114:    {
                    115:    int t;
                    116:    union numeric r1, r2;
                    117:    double atan2();
                    118: 
                    119:    if ((t = cvreal(&Arg2, &r2)) == NULL) runerr(102, &Arg2);
                    120:    if ((t = cvreal(&Arg1, &r1)) == NULL) runerr(102, &Arg1);
                    121:    mkreal(atan2(r1.real,r2.real),&Arg0);
                    122:    Return;
                    123:    }
                    124: 
                    125: #define PI 3.14159
                    126: 
                    127: /*
                    128:  * dtor(x), x in degrees
                    129:  */
                    130: FncDcl(dtor,1)
                    131:    {
                    132:    union numeric r;
                    133: 
                    134:    if (cvreal(&Arg1, &r) == NULL) runerr(102, &Arg1);
                    135:    mkreal(r.real * PI / 180, &Arg0);
                    136:    Return;
                    137:    }
                    138: 
                    139: /*
                    140:  * rtod(x), x in radians
                    141:  */
                    142: FncDcl(rtod,1)
                    143:    {
                    144:    union numeric r;
                    145: 
                    146:    if (cvreal(&Arg1, &r) == NULL) runerr(102, &Arg1);
                    147:    mkreal(r.real * 180 / PI, &Arg0);
                    148:    Return;
                    149:    }

unix.superglobalmegacorp.com

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