1 /********************************************************************
2 This file is part of the abs 0.907 distribution. abs is a spreadsheet
3 with graphical user interface.
4
5 Copyright (C) 1998-2001 Andr� Bertin (Andre.Bertin@ping.be)
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version if in the same spirit as version 2.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 Concact: abs@pi.be
22 http://home.pi.be/bertin/abs.shtml
23
24 *********************************************************************/
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #include "statfct.h"
53 #include "stdlib.h"
54 #include "math.h"
55 #include "y.tab.h"
56 #include "cell_vb.h"
57 #include "typedef.h"
58 #include "application.h"
59 #include "abv.h"
60
61 Fct statarrayfct[] =
62 {
63 {"AVEDEV", &vb_AVEDEV, 1, 1, NULL, NULL},
64 {"AVERAGE", &vb_AVERAGE, 1, 1, NULL, NULL},
65 {"BETADIST", &vb_BETADIST, 1, 1, NULL, NULL},
66 {"BETAINV", &vb_BETAINV, 1, 1, NULL, NULL},
67 {"BINOMDIST", &vb_BINOMDIST, 1, 1, NULL, NULL},
68 {"CHIDIST", &vb_CHIDIST, 1, 1, NULL, NULL},
69 {"CHIINV", &vb_CHIINV, 1, 1, NULL, NULL},
70 {"CHITEST", &vb_CHITEST, 1, 1, NULL, NULL},
71 {"CONFIDENCE", &vb_CONFIDENCE, 1, 1, NULL, NULL},
72 {"CORREL", &vb_CORREL, 1, 1, NULL, NULL},
73 {"COUNT", &vb_COUNT, 1, 1, NULL, NULL},
74 {"COUNTA", &vb_COUNTA, 1, 1, NULL, NULL},
75 {"COVAR", &vb_COVAR, 1, 1, NULL, NULL},
76 {"CRITBINOM", &vb_CRITBINOM, 1, 1, NULL, NULL},
77 {"DEVSQ", &vb_DEVSQ, 1, 1, NULL, NULL},
78 {"EXPONDIST", &vb_EXPONDIST, 1, 1, NULL, NULL},
79 {"FDIST", &vb_FDIST, 1, 1, NULL, NULL},
80 {"FINV", &vb_FINV, 1, 1, NULL, NULL},
81 {"FISHER", &vb_FISHER, 1, 1, NULL, NULL},
82 {"FISHERINV", &vb_FISHERINV, 1, 1, NULL, NULL},
83 {"FORECAST", &vb_FORECAST, 1, 1, NULL, NULL},
84 {"FREQUENCY", &vb_FREQUENCY, 1, 1, NULL, NULL},
85 {"FTEST", &vb_FTEST, 1, 1, NULL, NULL},
86 {"GAMMADIST", &vb_GAMMADIST, 1, 1, NULL, NULL},
87 {"GAMMAINV", &vb_GAMMAINV, 1, 1, NULL, NULL},
88 {"GAMMALN", &vb_GAMMALN, 1, 1, NULL, NULL},
89 {"GEOMEAN", &vb_GEOMEAN, 1, 1, NULL, NULL},
90 {"GROWTH", &vb_GROWTH, 1, 1, NULL, NULL},
91 {"HARMEAN", &vb_HARMEAN, 1, 1, NULL, NULL},
92 {"HYPGEOMDIST", &vb_HYPGEOMDIST, 1, 1, NULL, NULL},
93 {"INTERCEPT", &vb_INTERCEPT, 1, 1, NULL, NULL},
94 {"KURT", &vb_KURT, 1, 1, NULL, NULL},
95 {"LARGE", &vb_LARGE, 1, 1, NULL, NULL},
96 {"LINEST", &vb_LINEST, 1, 1, NULL, NULL},
97 {"LOGEST", &vb_LOGEST, 1, 1, NULL, NULL},
98 {"LOGINV", &vb_LOGINV, 1, 1, NULL, NULL},
99 {"LOGNORMDIST", &vb_LOGNORMDIST, 1, 1, NULL, NULL},
100 {"MAX", &vb_MAX, 1, 1, NULL, NULL},
101 {"MEDIAN", &vb_MEDIAN, 1, 1, NULL, NULL},
102 {"MIN", &vb_MIN, 1, 1, NULL, NULL},
103 {"MODE", &vb_MODE, 1, 1, NULL, NULL},
104 {"NEGBINOMDIST", &vb_NEGBINOMDIST, 1, 1, NULL, NULL},
105 {"NORMDIST", &vb_NORMDIST, 1, 1, NULL, NULL},
106 {"NORMINV", &vb_NORMINV, 1, 1, NULL, NULL},
107 {"NORMSDIST", &vb_NORMSDIST, 1, 1, NULL, NULL},
108 {"NORMSINV", &vb_NORMSINV, 1, 1, NULL, NULL},
109 {"PEARSON", &vb_PEARSON, 1, 1, NULL, NULL},
110 {"PERCENTILE", &vb_PERCENTILE, 1, 1, NULL, NULL},
111 {"PERCENTRANK", &vb_PERCENTRANK, 1, 1, NULL, NULL},
112 {"PERMUT", &vb_PERMUT, 1, 1, NULL, NULL},
113 {"POISSON", &vb_POISSON, 1, 1, NULL, NULL},
114 {"PROB", &vb_PROB, 1, 1, NULL, NULL},
115 {"QUARTILE", &vb_QUARTILE, 1, 1, NULL, NULL},
116 {"RANK", &vb_RANK, 1, 1, NULL, NULL},
117 {"RSQ", &vb_RSQ, 1, 1, NULL, NULL},
118 {"SKEW", &vb_SKEW, 1, 1, NULL, NULL},
119 {"SLOPE", &vb_SLOPE, 1, 1, NULL, NULL},
120 {"SMALL", &vb_SMALL, 1, 1, NULL, NULL},
121 {"STANDARDIZE", &vb_STANDARDIZE, 1, 1, NULL, NULL},
122 {"STDEV", &vb_STDEV, 1, 1, NULL, NULL},
123 {"STDEVP", &vb_STDEVP, 1, 1, NULL, NULL},
124 {"STEYX", &vb_STEYX, 1, 1, NULL, NULL},
125 {"TDIST", &vb_TDIST, 1, 1, NULL, NULL},
126 {"TINV", &vb_TINV, 1, 1, NULL, NULL},
127 {"TREND", &vb_TREND, 1, 1, NULL, NULL},
128 {"TRIMMEAN", &vb_TRIMMEAN, 1, 1, NULL, NULL},
129 {"TTEST", &vb_TTEST, 1, 1, NULL, NULL},
130 {"VAR", &vb_VAR, 1, 1, NULL, NULL},
131 {"VARP", &vb_VARP, 1, 1, NULL, NULL},
132 {"WEIBULL", &vb_WEIBULL, 1, 1, NULL, NULL},
133 {"ZTEST", &vb_ZTEST, 1, 1, NULL, NULL},
134 {NULL, NULL, 0, 0, NULL, NULL},
135 };
136
137 double
moyenne(int n,double * array)138 moyenne (int n, double *array)
139 {
140 double ret = 0;
141 int i;
142 for (i = 0; i < n; i++)
143 ret += array[i];
144 ret /= n;
145 return ret;
146 }
147
148 double
somme_carre(int n,double * array)149 somme_carre (int n, double *array)
150 {
151 double ret = 0;
152 int i;
153 for (i = 0; i < n; i++)
154 ret += array[i] * array[i];
155 return ret;
156 }
157
158
159 double
moyenne_deviation(int n,double * array)160 moyenne_deviation (int n, double *array)
161 {
162 double ret = 0;
163 int i;
164 double moy = moyenne (n, array);
165 for (i = 0; i < n; i++)
166 ret += fabs (array[i] - moy);
167 ret = ret / n;
168 return ret;
169 }
170
171 double
carre_deviation(int n,double * array)172 carre_deviation (int n, double *array)
173 {
174 double ret = 0;
175 int i;
176 double d;
177 double moy = moyenne (n, array);
178 for (i = 0; i < n; i++)
179 {
180 d = fabs (array[i] - moy);
181 ret += d * d;
182 }
183 return ret;
184 }
185
186
187
188
189
190
191 obj
vb_AVEDEV(int narg,obj * arg)192 vb_AVEDEV (int narg, obj * arg)
193 {
194 obj o;
195 int dim = arg2arraydouble (narg, arg);
196 double *array = getarraydouble ();
197 o.rec.d = moyenne_deviation (dim, array);
198 freearraydouble ();
199 o.type = DOUBLE;
200 return o;
201 }
202 obj
vb_AVERAGE(int narg,obj * arg)203 vb_AVERAGE (int narg, obj * arg)
204 {
205 obj o;
206 int dim = arg2arraydouble (narg, arg);
207 double *array = getarraydouble ();
208 o.rec.d = moyenne (dim, array);
209 freearraydouble ();
210 o.type = DOUBLE;
211 return o;
212 }
213 obj
vb_BETADIST(int narg,obj * arg)214 vb_BETADIST (int narg, obj * arg)
215 {
216 obj o;
217 o.rec.d = obj2double (arg[0]);
218 o.type = DOUBLE;
219 return o;
220 }
221 obj
vb_BETAINV(int narg,obj * arg)222 vb_BETAINV (int narg, obj * arg)
223 {
224 obj o;
225 o.rec.d = obj2double (arg[0]);
226 ABVInform ("BETAINV not yet implemented");
227 o.type = DOUBLE;
228 return o;
229 }
230 obj
vb_BINOMDIST(int narg,obj * arg)231 vb_BINOMDIST (int narg, obj * arg)
232 {
233 obj o;
234 o.rec.d = obj2double (arg[0]);
235 ABVInform ("BINOMDIST not yet implemented");
236 o.type = DOUBLE;
237 return o;
238 }
239 obj
vb_CHIDIST(int narg,obj * arg)240 vb_CHIDIST (int narg, obj * arg)
241 {
242 obj o;
243 o.rec.d = obj2double (arg[0]);
244 ABVInform ("CHIDIST not yet implemented");
245 o.type = DOUBLE;
246 return o;
247 }
248 obj
vb_CHIINV(int narg,obj * arg)249 vb_CHIINV (int narg, obj * arg)
250 {
251 obj o;
252 o.rec.d = obj2double (arg[0]);
253 ABVInform ("CHIINV not yet implemented");
254 o.type = DOUBLE;
255 return o;
256 }
257 obj
vb_CHITEST(int narg,obj * arg)258 vb_CHITEST (int narg, obj * arg)
259 {
260 obj o;
261 o.rec.d = obj2double (arg[0]);
262 ABVInform ("CHITEST not yet implemented");
263 o.type = DOUBLE;
264 return o;
265 }
266 obj
vb_CONFIDENCE(int narg,obj * arg)267 vb_CONFIDENCE (int narg, obj * arg)
268 {
269 obj o;
270 o.rec.d = obj2double (arg[0]);
271 ABVInform ("CONFIDENCE not yet implemented");
272 o.type = DOUBLE;
273 return o;
274 }
275 obj
vb_CORREL(int narg,obj * arg)276 vb_CORREL (int narg, obj * arg)
277 {
278 obj o;
279 o.rec.d = obj2double (arg[0]);
280 ABVInform ("CORREL not yet implemented");
281 o.type = DOUBLE;
282 return o;
283 }
284 obj
vb_COUNT(int narg,obj * arg)285 vb_COUNT (int narg, obj * arg)
286 {
287 obj o;
288 tmpRange *ran;
289 int i;
290 int item = 0;
291 for (i = 0; i < narg; i++)
292 {
293 if (arg[i].type == RANGE)
294 {
295 ran = (tmpRange *) arg[i].rec.s;
296 item += (ran->r2 - ran->r1 + 1) * (ran->c2 - ran->c1 + 1);
297 }
298 else
299 {
300 item++;
301 }
302 }
303 o.rec.i = item;
304 o.type = INTEGER;
305 return o;
306 }
307 obj
vb_COUNTA(int narg,obj * arg)308 vb_COUNTA (int narg, obj * arg)
309 {
310 obj o;
311 o.rec.d = obj2double (arg[0]);
312
313
314
315
316
317
318 ABVInform ("COUNTA not yet implemented");
319 o.type = DOUBLE;
320 return o;
321 }
322 obj
vb_COVAR(int narg,obj * arg)323 vb_COVAR (int narg, obj * arg)
324 {
325 obj o;
326 o.rec.d = obj2double (arg[0]);
327 ABVInform ("COVAR not yet implemented");
328 o.type = DOUBLE;
329 return o;
330 }
331 obj
vb_CRITBINOM(int narg,obj * arg)332 vb_CRITBINOM (int narg, obj * arg)
333 {
334 obj o;
335 o.rec.d = obj2double (arg[0]);
336 ABVInform ("CRITBINOM not yet implemented");
337 o.type = DOUBLE;
338 return o;
339 }
340 obj
vb_DEVSQ(int narg,obj * arg)341 vb_DEVSQ (int narg, obj * arg)
342 {
343 obj o;
344 int dim = arg2arraydouble (narg, arg);
345 double *array = getarraydouble ();
346
347 if (dim < 1)
348 return o;
349 o.rec.d = carre_deviation (dim, array);
350 freearraydouble ();
351 o.type = DOUBLE;
352 return o;
353 }
354 obj
vb_EXPONDIST(int narg,obj * arg)355 vb_EXPONDIST (int narg, obj * arg)
356 {
357 obj o;
358 o.rec.d = obj2double (arg[0]);
359 ABVInform ("EXPONDIST not yet implemented");
360 o.type = DOUBLE;
361 return o;
362 }
363 obj
vb_FDIST(int narg,obj * arg)364 vb_FDIST (int narg, obj * arg)
365 {
366 obj o;
367 o.rec.d = obj2double (arg[0]);
368 ABVInform ("FDIST not yet implemented");
369 o.type = DOUBLE;
370 return o;
371 }
372 obj
vb_FINV(int narg,obj * arg)373 vb_FINV (int narg, obj * arg)
374 {
375 obj o;
376 o.rec.d = obj2double (arg[0]);
377 ABVInform ("FINV not yet implemented");
378 o.type = DOUBLE;
379 return o;
380 }
381 obj
vb_FISHER(int narg,obj * arg)382 vb_FISHER (int narg, obj * arg)
383 {
384 obj o;
385 o.rec.d = obj2double (arg[0]);
386 ABVInform ("FISHER not yet implemented");
387 o.type = DOUBLE;
388 return o;
389 }
390 obj
vb_FISHERINV(int narg,obj * arg)391 vb_FISHERINV (int narg, obj * arg)
392 {
393 obj o;
394 o.rec.d = obj2double (arg[0]);
395 ABVInform ("FISHERINV not yet implemented");
396 o.type = DOUBLE;
397 return o;
398 }
399 obj
vb_FORECAST(int narg,obj * arg)400 vb_FORECAST (int narg, obj * arg)
401 {
402 obj o;
403 o.rec.d = obj2double (arg[0]);
404 ABVInform ("FORECAST not yet implemented");
405 o.type = DOUBLE;
406 return o;
407 }
408 obj
vb_FREQUENCY(int narg,obj * arg)409 vb_FREQUENCY (int narg, obj * arg)
410 {
411 obj o;
412 o.rec.d = obj2double (arg[0]);
413 ABVInform ("FREQUENCY not yet implemented");
414 o.type = DOUBLE;
415 return o;
416 }
417 obj
vb_FTEST(int narg,obj * arg)418 vb_FTEST (int narg, obj * arg)
419 {
420 obj o;
421 o.rec.d = obj2double (arg[0]);
422 ABVInform ("FTEST not yet implemented");
423 o.type = DOUBLE;
424 return o;
425 }
426 obj
vb_GAMMADIST(int narg,obj * arg)427 vb_GAMMADIST (int narg, obj * arg)
428 {
429 obj o;
430 o.rec.d = obj2double (arg[0]);
431 ABVInform ("GAMMADIST not yet implemented");
432 o.type = DOUBLE;
433 return o;
434 }
435 obj
vb_GAMMAINV(int narg,obj * arg)436 vb_GAMMAINV (int narg, obj * arg)
437 {
438 obj o;
439 o.rec.d = obj2double (arg[0]);
440 ABVInform ("GAMMAINV not yet implemented");
441 o.type = DOUBLE;
442 return o;
443 }
444 obj
vb_GAMMALN(int narg,obj * arg)445 vb_GAMMALN (int narg, obj * arg)
446 {
447 obj o;
448 o.rec.d = obj2double (arg[0]);
449 ABVInform ("GAMMALN not yet implemented");
450 o.type = DOUBLE;
451 return o;
452 }
453 obj
vb_GEOMEAN(int narg,obj * arg)454 vb_GEOMEAN (int narg, obj * arg)
455 {
456 obj o;
457 double v = 1.0;
458 int i;
459 int dim = arg2arraydouble (narg, arg);
460 double d = dim;
461 double *array = getarraydouble ();
462 for (i = 0; i < dim; i++)
463 v *= array[i];
464 if (dim > 0 && v > 0)
465 {
466 v = pow (v, 1.0 / d);
467 }
468 else
469 v = 0;
470 freearraydouble ();
471 o.rec.d = v;
472 o.type = DOUBLE;
473 return o;
474 }
475 obj
vb_GROWTH(int narg,obj * arg)476 vb_GROWTH (int narg, obj * arg)
477 {
478 obj o;
479 o.rec.d = obj2double (arg[0]);
480 ABVInform ("GROWTH not yet implemented");
481 o.type = DOUBLE;
482 return o;
483 }
484 obj
vb_HARMEAN(int narg,obj * arg)485 vb_HARMEAN (int narg, obj * arg)
486 {
487 obj o;
488 double v = 0;
489 int i;
490 int dim = arg2arraydouble (narg, arg);
491 double *array = getarraydouble ();
492 o.rec.d = 0;
493 o.type = DOUBLE;
494 if (dim < 1)
495 return o;
496 for (i = 0; i < dim; i++)
497 {
498 if (array[i] == 0)
499 {
500 return o;
501 }
502 v += 1 / array[i];
503 }
504 freearraydouble ();
505 o.rec.d = dim / v;
506 o.type = DOUBLE;
507 return o;
508 }
509
510 obj
vb_HYPGEOMDIST(int narg,obj * arg)511 vb_HYPGEOMDIST (int narg, obj * arg)
512 {
513 obj o;
514 o.rec.d = obj2double (arg[0]);
515 ABVInform ("HYPGEOMDIS not yet implemented");
516 o.type = DOUBLE;
517 return o;
518 }
519 obj
vb_INTERCEPT(int narg,obj * arg)520 vb_INTERCEPT (int narg, obj * arg)
521 {
522 obj o;
523 o.rec.d = obj2double (arg[0]);
524 ABVInform ("INTERCEPT not yet implemented");
525 o.type = DOUBLE;
526 return o;
527 }
528 obj
vb_KURT(int narg,obj * arg)529 vb_KURT (int narg, obj * arg)
530 {
531 obj o;
532 o.rec.d = obj2double (arg[0]);
533 ABVInform ("KURT not yet implemented");
534 o.type = DOUBLE;
535 return o;
536 }
537 obj
vb_LARGE(int narg,obj * arg)538 vb_LARGE (int narg, obj * arg)
539 {
540 obj o;
541 o.rec.d = obj2double (arg[0]);
542 ABVInform ("LARGE not yet implemented");
543 o.type = DOUBLE;
544 return o;
545 }
546 obj
vb_LINEST(int narg,obj * arg)547 vb_LINEST (int narg, obj * arg)
548 {
549 obj o;
550 o.rec.d = obj2double (arg[0]);
551 ABVInform ("LINEST not yet implemented");
552 o.type = DOUBLE;
553 return o;
554 }
555 obj
vb_LOGEST(int narg,obj * arg)556 vb_LOGEST (int narg, obj * arg)
557 {
558 obj o;
559 o.rec.d = obj2double (arg[0]);
560 ABVInform ("LOGEST not yet implemented");
561 o.type = DOUBLE;
562 return o;
563 }
564 obj
vb_LOGINV(int narg,obj * arg)565 vb_LOGINV (int narg, obj * arg)
566 {
567 obj o;
568 o.rec.d = obj2double (arg[0]);
569 ABVInform ("LOGINV not yet implemented");
570 o.type = DOUBLE;
571 return o;
572 }
573 obj
vb_LOGNORMDIST(int narg,obj * arg)574 vb_LOGNORMDIST (int narg, obj * arg)
575 {
576 obj o;
577 o.rec.d = obj2double (arg[0]);
578 ABVInform ("LOGNORMDIST not yet implemented");
579 o.type = DOUBLE;
580 return o;
581 }
582 obj
vb_MAX(int narg,obj * arg)583 vb_MAX (int narg, obj * arg)
584 {
585 obj o;
586 double val;
587 int i;
588 int dim = arg2arraydouble (narg, arg);
589 double *array = getarraydouble ();
590 val = array[0];
591 for (i = 1; i < dim; i++)
592 if (array[i] > val)
593 val = array[i];
594
595 freearraydouble ();
596 o.rec.d = val;
597 o.type = DOUBLE;
598 return o;
599 }
600
601 obj
vb_MEDIAN(int narg,obj * arg)602 vb_MEDIAN (int narg, obj * arg)
603 {
604 obj o;
605 int i;
606 int dim = arg2arraydouble (narg, arg);
607 double v = dim;
608 double *array = getarraydouble ();
609 double h = v / 2.0;
610 i = dim / 2;
611
612 sortarraydouble ();
613
614 if (i == h && i > 0)
615 {
616 v = (array[i] + array[i - 1]) / 2.0;
617 }
618 else
619 v = array[i];
620
621 freearraydouble ();
622 o.rec.d = v;
623
624 o.type = DOUBLE;
625 return o;
626 }
627
628 obj
vb_MIN(int narg,obj * arg)629 vb_MIN (int narg, obj * arg)
630 {
631 obj o;
632 double val;
633 int i;
634 int dim = arg2arraydouble (narg, arg);
635 double *array = getarraydouble ();
636 val = array[0];
637 for (i = 1; i < dim; i++)
638 if (array[i] < val)
639 val = array[i];
640 freearraydouble ();
641 o.rec.d = val;
642 o.type = DOUBLE;
643 return o;
644 }
645 obj
vb_MODE(int narg,obj * arg)646 vb_MODE (int narg, obj * arg)
647 {
648 obj o;
649 o.rec.d = obj2double (arg[0]);
650 ABVInform ("MODE not yet implemented");
651 o.type = DOUBLE;
652 return o;
653 }
654 obj
vb_NEGBINOMDIST(int narg,obj * arg)655 vb_NEGBINOMDIST (int narg, obj * arg)
656 {
657 obj o;
658 o.rec.d = obj2double (arg[0]);
659 ABVInform ("NEGBINOMDIST not yet implemented");
660 o.type = DOUBLE;
661 return o;
662 }
663 obj
vb_NORMDIST(int narg,obj * arg)664 vb_NORMDIST (int narg, obj * arg)
665 {
666 obj o;
667 o.rec.d = obj2double (arg[0]);
668 ABVInform ("NORMDIST not yet implemented");
669 o.type = DOUBLE;
670 return o;
671 }
672 obj
vb_NORMINV(int narg,obj * arg)673 vb_NORMINV (int narg, obj * arg)
674 {
675 obj o;
676 o.rec.d = obj2double (arg[0]);
677 ABVInform ("NORMINV not yet implemented");
678 o.type = DOUBLE;
679 return o;
680 }
681 obj
vb_NORMSDIST(int narg,obj * arg)682 vb_NORMSDIST (int narg, obj * arg)
683 {
684 obj o;
685 o.rec.d = obj2double (arg[0]);
686 ABVInform ("NORMSDIST not yet implemented");
687 o.type = DOUBLE;
688 return o;
689 }
690 obj
vb_NORMSINV(int narg,obj * arg)691 vb_NORMSINV (int narg, obj * arg)
692 {
693 obj o;
694 o.rec.d = obj2double (arg[0]);
695 ABVInform ("NORMSINV not yet implemented");
696 o.type = DOUBLE;
697 return o;
698 }
699 obj
vb_PEARSON(int narg,obj * arg)700 vb_PEARSON (int narg, obj * arg)
701 {
702 obj o;
703 o.rec.d = obj2double (arg[0]);
704 ABVInform ("PEARSON not yet implemented");
705 o.type = DOUBLE;
706 return o;
707 }
708 obj
vb_PERCENTILE(int narg,obj * arg)709 vb_PERCENTILE (int narg, obj * arg)
710 {
711 obj o;
712 o.rec.d = obj2double (arg[0]);
713 ABVInform ("PERCENTILE not yet implemented");
714 o.type = DOUBLE;
715 return o;
716 }
717 obj
vb_PERCENTRANK(int narg,obj * arg)718 vb_PERCENTRANK (int narg, obj * arg)
719 {
720 obj o;
721 o.rec.d = obj2double (arg[0]);
722 ABVInform ("PERCENTRAN not yet implemented");
723 o.type = DOUBLE;
724 return o;
725 }
726 obj
vb_PERMUT(int narg,obj * arg)727 vb_PERMUT (int narg, obj * arg)
728 {
729 obj o;
730 o.rec.d = obj2double (arg[0]);
731 ABVInform ("PERMUT not yet implemented");
732 o.type = DOUBLE;
733 return o;
734 }
735 obj
vb_POISSON(int narg,obj * arg)736 vb_POISSON (int narg, obj * arg)
737 {
738 obj o;
739 o.rec.d = obj2double (arg[0]);
740 ABVInform ("POISSON not yet implemented");
741 o.type = DOUBLE;
742 return o;
743 }
744 obj
vb_PROB(int narg,obj * arg)745 vb_PROB (int narg, obj * arg)
746 {
747 obj o;
748 o.rec.d = obj2double (arg[0]);
749 ABVInform ("PROB not yet implemented");
750 o.type = DOUBLE;
751 return o;
752 }
753 obj
vb_QUARTILE(int narg,obj * arg)754 vb_QUARTILE (int narg, obj * arg)
755 {
756 obj o;
757 o.rec.d = obj2double (arg[0]);
758 ABVInform ("QUARTILE not yet implemented");
759 o.type = DOUBLE;
760 return o;
761 }
762 obj
vb_RANK(int narg,obj * arg)763 vb_RANK (int narg, obj * arg)
764 {
765 obj o;
766 o.rec.d = obj2double (arg[0]);
767 ABVInform ("RANK not yet implemented");
768 o.type = DOUBLE;
769 return o;
770 }
771 obj
vb_RSQ(int narg,obj * arg)772 vb_RSQ (int narg, obj * arg)
773 {
774 obj o;
775 o.rec.d = obj2double (arg[0]);
776 ABVInform ("RSQ not yet implemented");
777 o.type = DOUBLE;
778 return o;
779 }
780 obj
vb_SKEW(int narg,obj * arg)781 vb_SKEW (int narg, obj * arg)
782 {
783 obj o;
784 o.rec.d = obj2double (arg[0]);
785 ABVInform ("SKEW not yet implemented");
786 o.type = DOUBLE;
787 return o;
788 }
789 obj
vb_SLOPE(int narg,obj * arg)790 vb_SLOPE (int narg, obj * arg)
791 {
792 obj o;
793 o.rec.d = obj2double (arg[0]);
794 ABVInform ("SLOPE not yet implemented");
795 o.type = DOUBLE;
796 return o;
797 }
798 obj
vb_SMALL(int narg,obj * arg)799 vb_SMALL (int narg, obj * arg)
800 {
801 obj o = vb_MAX (narg, arg);
802 int pos;
803 int dim = arg2arraydouble (narg, arg);
804 double *array = getarraydouble ();
805
806 if (dim < 2)
807 return o;
808
809 pos = array[dim - 1];
810 array[dim - 1] = o.rec.d + 1;
811 sortarraydouble ();
812
813 if (pos < 0 || pos > dim - 1)
814 return o;
815 o.rec.d = array[pos - 1];
816 freearraydouble ();
817 o.type = DOUBLE;
818 return o;
819 }
820 obj
vb_STANDARDIZE(int narg,obj * arg)821 vb_STANDARDIZE (int narg, obj * arg)
822 {
823 obj o;
824 o.rec.d = obj2double (arg[0]);
825 ABVInform ("STANDARDIZE not yet implemented");
826 o.type = DOUBLE;
827 return o;
828 }
829 obj
vb_STDEV(int narg,obj * arg)830 vb_STDEV (int narg, obj * arg)
831 {
832 obj o;
833 int dim = arg2arraydouble (narg, arg);
834 double *array = getarraydouble ();
835 if (dim < 2)
836 return o;
837 o.rec.d = sqrt (carre_deviation (dim, array) / (dim - 1));
838 o.type = DOUBLE;
839
840
841 o.type = DOUBLE;
842
843 freearraydouble ();
844 return o;
845 }
846 obj
vb_STDEVP(int narg,obj * arg)847 vb_STDEVP (int narg, obj * arg)
848 {
849 obj o;
850 int dim = arg2arraydouble (narg, arg);
851 double *array = getarraydouble ();
852
853 if (dim < 1)
854 return o;
855 o.rec.d = sqrt (carre_deviation (dim, array) / dim);
856 o.type = DOUBLE;
857
858 freearraydouble ();
859 return o;
860 }
861 obj
vb_STEYX(int narg,obj * arg)862 vb_STEYX (int narg, obj * arg)
863 {
864 obj o;
865 o.rec.d = obj2double (arg[0]);
866 ABVInform ("STEYX not yet implemented");
867 o.type = DOUBLE;
868 return o;
869 }
870 obj
vb_TDIST(int narg,obj * arg)871 vb_TDIST (int narg, obj * arg)
872 {
873 obj o;
874 o.rec.d = obj2double (arg[0]);
875 ABVInform ("TDIST not yet implemented");
876 o.type = DOUBLE;
877 return o;
878 }
879 obj
vb_TINV(int narg,obj * arg)880 vb_TINV (int narg, obj * arg)
881 {
882 obj o;
883 o.rec.d = obj2double (arg[0]);
884 ABVInform ("TINV not yet implemented");
885 o.type = DOUBLE;
886 return o;
887 }
888 obj
vb_TREND(int narg,obj * arg)889 vb_TREND (int narg, obj * arg)
890 {
891 obj o;
892 o.rec.d = obj2double (arg[0]);
893 ABVInform ("TREND not yet implemented");
894 o.type = DOUBLE;
895 return o;
896 }
897 obj
vb_TRIMMEAN(int narg,obj * arg)898 vb_TRIMMEAN (int narg, obj * arg)
899 {
900 obj o;
901 o.rec.d = obj2double (arg[0]);
902 ABVInform ("TRIMMEAN not yet implemented");
903 o.type = DOUBLE;
904 return o;
905 }
906 obj
vb_TTEST(int narg,obj * arg)907 vb_TTEST (int narg, obj * arg)
908 {
909 obj o;
910 o.rec.d = obj2double (arg[0]);
911 ABVInform ("TTEST not yet implemented");
912 o.type = DOUBLE;
913 return o;
914 }
915 obj
vb_VARP(int narg,obj * arg)916 vb_VARP (int narg, obj * arg)
917 {
918 obj o;
919 int dim = arg2arraydouble (narg, arg);
920 double *array = getarraydouble ();
921 if (dim < 1)
922 return o;
923 o.rec.d = carre_deviation (dim, array) / dim;
924 o.type = DOUBLE;
925
926 freearraydouble ();
927
928 return o;
929 }
930 obj
vb_VAR(int narg,obj * arg)931 vb_VAR (int narg, obj * arg)
932 {
933 obj o;
934 int dim = arg2arraydouble (narg, arg);
935 double *array = getarraydouble ();
936 if (dim < 2)
937 return o;
938 o.rec.d = carre_deviation (dim, array) / (dim - 1);
939
940 o.type = DOUBLE;
941
942 freearraydouble ();
943
944
945 return o;
946 }
947 obj
vb_WEIBULL(int narg,obj * arg)948 vb_WEIBULL (int narg, obj * arg)
949 {
950 obj o;
951 o.rec.d = obj2double (arg[0]);
952 ABVInform ("WEIBULL not yet implemented");
953 o.type = DOUBLE;
954 return o;
955 }
956 obj
vb_ZTEST(int narg,obj * arg)957 vb_ZTEST (int narg, obj * arg)
958 {
959 obj o;
960 o.rec.d = obj2double (arg[0]);
961 ABVInform ("ZTEST not yet implemented");
962 o.type = DOUBLE;
963 return o;
964 }
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040