#!/usr/bin/newlisp
;; moments - benchmark
;; read file filter empty lines
(define (main)
(while (read-line) (push (float (current-line)) nums))
(set 'nums (reverse (filter float? nums)))
(set 'n (length nums))
(set 'sum (apply add nums))
(set 'mean (div sum n))
(set 'avg-dev 0 'std-dev 0 'var 0 'skew 0 'kurtosis 0)
(set 'dev (map sub nums (dup mean n)))
(set 'avg-dev (div (apply add (map abs dev)) n))
(set 'var (div (apply add (map mul dev dev)) (- n 1)))
(set 'skew (apply add (map mul dev dev dev)))
(set 'kurtosis (apply add (map mul dev dev dev dev)))
(set 'std-dev (sqrt var))
(if (> var 0.0)
(begin
(set 'skew (div skew (mul n var std-dev)))
(set 'kurtosis (sub (div kurtosis (mul n var var)) 3.0))))
(sort nums)
(set 'mid (/ n 2))
(if (= 0 (% n 2))
(set 'median (div (add (nums mid) (nums (- mid 1))) 2))
(set 'median (nums mid)))
(println (format "n: %d" n))
(println (format "median: %f" median))
(println (format "mean: %f" mean))
(println (format "average_deviation: %f" avg-dev))
(println (format "standard_deviation: %f" std-dev))
(println (format "variance: %f" var))
(println (format "skew: %f" skew))
(println (format "kurtosis: %f" kurtosis))
)
(main)
;; eof
syntax highlighting with newLISP and syntax.cgi