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