'****************************************************************************** ' EXCEL Compatible Functions that take a variable number of arguments '****************************************************************************** ' Written by Kevin Diggins October 2003 ' Arguments must be DOUBLES ... literals must include a decimal point '****************************************************************************** CONST END_ARG = 0.246813579 'Magic number: CLS ? "Min =", FMIN# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Max =", FMAX# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Mean =", MEAN# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Sum =", FSUM# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Variance (population) =", VARP# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Variance (sample) =", VAR# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Std Dev (population) =", STDEVP# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) ? "Std Dev (sample) =", STDEV# (1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,END_ARG) PAUSE FUNCTION FMIN (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW Accum = 1E+38 AS DOUBLE DIM RAW i = Arg1 AS DOUBLE va_start (Index, Arg1) WHILE i <> END_ARG IF i < Accum THEN Accum = i i = va_arg (Index,DOUBLE) WEND va_end (Index) FUNCTION = Accum END FUNCTION FUNCTION FMAX (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW Accum = 1E-38 AS DOUBLE DIM RAW i = Arg1 AS DOUBLE va_start (Index, Arg1) WHILE i <> END_ARG IF i > Accum THEN Accum = i i = va_arg (Index,DOUBLE) WEND va_end (Index) FUNCTION = Accum END FUNCTION FUNCTION MEAN (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW Count = 0 AS DOUBLE DIM RAW Sum = 0 AS DOUBLE DIM RAW i = Arg1 AS DOUBLE va_start (Index, Arg1) WHILE i <> END_ARG Sum = Sum + i Count++ i = va_arg (Index,DOUBLE) WEND va_end (Index) FUNCTION = Sum / Count END FUNCTION FUNCTION FSUM (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW Sum = 0 AS DOUBLE DIM RAW i = Arg1 AS DOUBLE va_start (Index, Arg1) WHILE i <> END_ARG Sum = Sum + i i = va_arg (Index,DOUBLE) WEND va_end (Index) FUNCTION = Sum END FUNCTION FUNCTION STDEV (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW i = Arg1 AS DOUBLE DIM RAW Total = 0 AS DOUBLE DIM RAW Srs = 0 AS DOUBLE DIM RAW Mean = 0 AS DOUBLE DIM RAW N = 0 AS LONG va_start (Index, Arg1) WHILE i <> END_ARG Total = Total + i N++ i = va_arg (Index,DOUBLE) WEND va_end (Index) Mean = Total / N va_start (Index, Arg1) i = Arg1 WHILE i <> END_ARG Srs = Srs + ABS(i-Mean) ^ 2 i = va_arg(Index,DOUBLE) WEND va_end (Index) FUNCTION = SQRT (Srs/(N-1)) END FUNCTION FUNCTION STDEVP (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW i = Arg1 AS DOUBLE DIM RAW Total = 0 AS DOUBLE DIM RAW Srs = 0 AS DOUBLE DIM RAW Mean = 0 AS DOUBLE DIM RAW N = 0 AS LONG va_start (Index, Arg1) WHILE i <> END_ARG Total = Total + i N++ i = va_arg (Index,DOUBLE) WEND va_end (Index) Mean = Total / N va_start (Index, Arg1) i = Arg1 WHILE i <> END_ARG Srs = Srs + ABS(i-Mean) ^ 2 i = va_arg(Index,DOUBLE) WEND va_end (Index) FUNCTION = SQRT (Srs/(N)) END FUNCTION FUNCTION VAR (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW i = Arg1 AS DOUBLE DIM RAW Total = 0 AS DOUBLE DIM RAW Srs = 0 AS DOUBLE DIM RAW Mean = 0 AS DOUBLE DIM RAW N = 0 AS LONG va_start (Index, Arg1) WHILE i <> END_ARG Total = Total + i N++ i = va_arg (Index,DOUBLE) WEND va_end (Index) Mean = Total / N va_start (Index, Arg1) i = Arg1 WHILE i <> END_ARG Srs = Srs + ABS(i-Mean) ^ 2 i = va_arg(Index,DOUBLE) WEND va_end (Index) FUNCTION = Srs/(N-1) END FUNCTION FUNCTION VARP (Arg1 AS DOUBLE, ... ) AS DOUBLE DIM RAW Index AS va_list DIM RAW i = Arg1 AS DOUBLE DIM RAW Total = 0 AS DOUBLE DIM RAW Srs = 0 AS DOUBLE DIM RAW Mean = 0 AS DOUBLE DIM RAW N = 0 AS LONG va_start (Index, Arg1) WHILE i <> END_ARG Total = Total + i N++ i = va_arg (Index,DOUBLE) WEND va_end (Index) Mean = Total / N va_start (Index, Arg1) i = Arg1 WHILE i <> END_ARG Srs = Srs + ABS(i-Mean) ^ 2 i = va_arg(Index,DOUBLE) WEND va_end (Index) FUNCTION = Srs/N END FUNCTION