|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.