Update the changelog
[opencv] / apps / Hawk / CVEiCL / EiC / module / stdClib / src / math.c
1 /* math.c
2  *
3  *      (C) Copyright Dec 20 1998, Edmond J. Breen.
4  *                 ALL RIGHTS RESERVED.
5  * This code may be copied for personal, non-profit use only.
6  *
7  */
8
9 /* This file is broken into 2 parts
10  * the first part defines the interface routines
11  * and the 2nd part adds the interface routine
12  * to EiC's look up tables.
13  */
14
15
16 #include <math.h>
17 #include <stdlib.h>
18 #include "eic.h"
19
20
21 /* MATH.H STUFF */
22
23 val_t eic_div(void)
24 {
25     /*  rem: the return type is a structure;
26      *  therefore, the first slot is used for
27      *  a hidden parameter
28      */
29
30     val_t v;
31     static div_t d; /* create some memory */
32
33     /* skip argument -1 & start at -2 */
34
35     int num = arg(1,getargs(),int);
36     int dem = arg(2,getargs(),int);
37
38     d.quot = num/dem;
39     d.rem = num - dem * d.quot;
40     if(d.quot < 0 && 0 < d.rem) {
41         d.quot += 1;
42         d.rem -= dem;
43     }
44
45     /* set safe */
46     v.p.sp = v.p.p = &d;
47     v.p.ep = (char*)&d + sizeof(div_t);
48     
49     return v;
50 }
51
52 val_t eic_ldiv(void)
53 {
54     val_t v;
55     static ldiv_t d; /* create some memory */
56
57     /* skip argument -1 & start at -2 */
58
59     long num = arg(1,getargs(),long);
60     long dem = arg(2,getargs(),long);
61
62     d.quot = num/dem;
63     d.rem = num - dem * d.quot;
64     if(d.quot < 0 && 0 < d.rem) {
65         d.quot += 1;
66         d.rem -= dem;
67     }
68
69     /* set safe */
70     v.p.sp = v.p.p = &d;
71     v.p.ep = (char*)&d + sizeof(ldiv_t);
72
73     return v;
74 }
75
76 val_t eic_acos(void)
77 {
78     val_t v;
79     v.dval = acos(arg(0,getargs(),double));
80     return v;
81 }
82
83 val_t eic_asin(void)
84 {
85     val_t v;
86     v.dval = asin(arg(0,getargs(),double));
87     return v;
88 }
89 val_t eic_atan(void)
90 {
91     val_t v;
92     v.dval = atan(arg(0,getargs(),double));
93     return v;
94 }
95 val_t eic_atan2(void)
96 {
97     val_t v;
98     v.dval = atan2(arg(0,getargs(),double), arg(1,getargs(),double));
99     return v;
100 }
101 val_t eic_cos(void)
102 {
103     val_t v;
104     v.dval = cos(arg(0,getargs(),double));
105     return v;
106 }
107 val_t eic_sin(void)
108 {
109     val_t v;
110     v.dval = sin(arg(0,getargs(),double));
111     return v;
112 }
113 val_t eic_tan(void)
114 {
115     val_t v;
116     v.dval = tan(arg(0,getargs(),double));
117     return v;
118 }
119 val_t eic_cosh(void)
120 {
121     val_t v;
122     v.dval = cosh(arg(0,getargs(),double));
123     return v;
124 }
125 val_t eic_sinh(void)
126 {
127     val_t v;
128     v.dval = sinh(arg(0,getargs(),double));
129     return v;
130 }
131 val_t eic_tanh(void)
132 {
133     val_t v;
134     v.dval = tanh(arg(0,getargs(),double));
135     return v;
136 }
137 val_t eic_exp(void)
138 {
139     val_t v;
140     v.dval = exp(arg(0,getargs(),double));
141     return v;
142 }
143 val_t eic_frexp(void)
144 {
145     val_t v;
146     v.dval = frexp(arg(0,getargs(),double), arg(1,getargs(),ptr_t).p);
147     return v;
148 }
149 val_t eic_ldexp(void)
150 {
151     val_t v;
152     v.dval = ldexp(arg(0,getargs(),double), arg(1,getargs(),int));
153     return v;
154 }
155 val_t eic_log(void)
156 {
157     val_t v;
158     v.dval = log(arg(0,getargs(),double));
159     return v;
160 }
161 val_t eic_log10(void)
162 {
163     val_t v;
164     v.dval = log10(arg(0,getargs(),double));
165     return v;
166 }
167 val_t eic_modf(void)
168 {
169     val_t v;
170     v.dval = modf(arg(0,getargs(),double), arg(1,getargs(),ptr_t).p);
171     return v;
172 }
173 val_t eic_pow(void)
174 {
175     val_t v;
176     v.dval = pow(arg(0,getargs(),double), arg(1,getargs(),double));
177     return v;
178 }
179 val_t eic_sqrt(void)
180 {
181     val_t v;
182     v.dval = sqrt(arg(0,getargs(),double));
183     return v;
184 }
185 val_t eic_ceil(void)
186 {
187     val_t v;
188     v.dval = ceil(arg(0,getargs(),double));
189     return v;
190 }
191 val_t eic_fabs(void)
192 {
193     val_t v;
194     v.dval = fabs(arg(0,getargs(),double));
195     return v;
196 }
197 val_t eic_floor(void)
198 {
199     val_t v;
200     v.dval = floor(arg(0,getargs(),double));
201     return v;
202 }
203 val_t eic_fmod(void)
204 {
205     val_t v;
206     v.dval = fmod(arg(0,getargs(),double), arg(1,getargs(),double));
207     return v;
208 }
209
210
211 /***********************************************************************************/
212
213 void module_math(void)
214 {
215     /* math.h stuff */
216     EiC_add_builtinfunc("div",eic_div);
217     EiC_add_builtinfunc("ldiv",eic_ldiv);
218     EiC_add_builtinfunc("acos",eic_acos);
219     EiC_add_builtinfunc("asin",eic_asin);
220     EiC_add_builtinfunc("atan",eic_atan);
221     EiC_add_builtinfunc("atan2",eic_atan2);
222     EiC_add_builtinfunc("cos",eic_cos);
223     EiC_add_builtinfunc("sin",eic_sin);
224     EiC_add_builtinfunc("tan",eic_tan);
225     EiC_add_builtinfunc("cosh",eic_cosh);
226     EiC_add_builtinfunc("sinh",eic_sinh);
227     EiC_add_builtinfunc("tanh",eic_tanh);
228     EiC_add_builtinfunc("exp",eic_exp);
229     EiC_add_builtinfunc("frexp",eic_frexp);
230     EiC_add_builtinfunc("ldexp",eic_ldexp);
231     EiC_add_builtinfunc("log",eic_log);
232     EiC_add_builtinfunc("log10",eic_log10);
233     EiC_add_builtinfunc("modf",eic_modf);
234     EiC_add_builtinfunc("pow",eic_pow);
235     EiC_add_builtinfunc("sqrt",eic_sqrt);
236     EiC_add_builtinfunc("ceil",eic_ceil);
237     EiC_add_builtinfunc("fabs",eic_fabs);
238     EiC_add_builtinfunc("floor",eic_floor);
239     EiC_add_builtinfunc("fmod",eic_fmod);
240
241  
242 }