5c203edfdd54a0a940be9a0432bf49b14d589d6d
12 /* global variables */
17 /* stack management */
22 if ((n
<= 0) || (n
> stack_size
)) {
23 VERBOSE (WARNING
, fprintf (stdout
, "error out of bound (%d/%d)\n", n
, stack_size
));
39 ret
= stack
[--stack_size
];
40 double *tmp
= (double *) callocordie (stack_size
, sizeof (double));
41 memcpy (tmp
, stack
, stack_size
* sizeof (double));
45 VERBOSE (WARNING
, fprintf (stdout
, "error stack empty\n"));
50 double push (double val
)
52 double *tmp
= (double *) callocordie (stack_size
+ 1, sizeof (double));
53 memcpy (tmp
, stack
, stack_size
* sizeof (double));
58 stack
[stack_size
++] = val
;
62 double put (int n
, double val
)
65 VERBOSE (WARNING
, fprintf (stdout
, "error out of bound (%d/%d)\n", n
, stack_size
));
69 double *tmp
= (double *) callocordie (n
, sizeof (double));
70 memcpy (tmp
, stack
, stack_size
* sizeof (double));
79 double set (int nbops
, element_t
**ops
)
88 stack
= (double *) callocordie (nbops
, sizeof (double));
89 for (i
= 0; i
< nbops
; i
++) {
90 stack
[i
] = evaluate_element (ops
[i
], 0);
100 fprintf (stdout
, "stack:");
101 for (i
= 0; i
< stack_size
; i
++) {
102 fprintf (stdout
, " ");
103 fprintf (stdout
, minform
, stack
[i
]);
105 fprintf (stdout
, "\n");
108 /* stack functions */
114 if (stack_size
< 1) {
115 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
119 for (i
= 1; i
< stack_size
; i
++) {
120 if (stack
[i
] > ret
) {
131 if (stack_size
< 1) {
132 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
135 for (i
= 0; i
< stack_size
; i
++) {
138 return ret
/ stack_size
;
145 if (stack_size
< 1) {
146 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
150 for (i
= 1; i
< stack_size
; i
++) {
151 if (stack
[i
] < ret
) {
161 if (stack_size
< 1) {
162 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
165 for (i
= 0; i
< stack_size
- 1; i
++) {
167 for (j
= 0; j
< stack_size
- 1; j
++) {
168 if (stack
[j
] > stack
[j
+ 1]) {
169 double tmp
= stack
[j
];
170 stack
[j
] = stack
[j
+ 1];
184 if (stack_size
< 3) {
185 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
188 double *tmp
= (double *) callocordie (stack_size
, sizeof (double));
189 memcpy (tmp
, stack
, stack_size
* sizeof (double));
191 ret
= stack
[(stack_size
- 1)/ 2];
192 memcpy (stack
, tmp
, stack_size
* sizeof (double));
201 if (stack_size
< 1) {
202 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
205 for (i
= 0; i
< stack_size
; i
++) {
215 if (stack_size
< 1) {
216 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
219 for (i
= 0; i
< stack_size
; i
++) {
230 if (stack_size
< 2) {
231 VERBOSE (WARNING
, fprintf (stdout
, "error not enough element in stack (%d)\n", stack_size
));
235 for (i
= 0; i
< stack_size
; i
++) {
236 ret
+= (stack
[i
] - m
) * (stack
[i
] - m
);
238 return ret
/ stack_size
;
241 /* vim: set ts=4 sw=4 et: */