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