Rewrote the moments benchmark to potentially benefit from unboxing of
loop accumulators.
This commit is contained in:
parent
06eb544fd6
commit
72ec18cc68
|
@ -8,62 +8,52 @@
|
|||
|
||||
(define (to-str n) (real->decimal-string n 6))
|
||||
|
||||
(let* ((sum 0.0)
|
||||
(numlist (let loop ((line (read-line)) (numlist '()))
|
||||
(cond ((eof-object? line) numlist)
|
||||
(else
|
||||
(let ((num (string->number line)))
|
||||
(set! sum (+ num sum))
|
||||
(loop (read-line) (cons num numlist))))))))
|
||||
(unless (null? numlist)
|
||||
(let ((n (length numlist)))
|
||||
(let ((mean (/ sum n))
|
||||
(average_deviation 0.0)
|
||||
(standard_deviation 0.0)
|
||||
(variance 0.0)
|
||||
(skew 0.0)
|
||||
(kurtosis 0.0)
|
||||
(median 0.0)
|
||||
(deviation 0.0))
|
||||
(let loop ((nums numlist))
|
||||
(if (not (null? nums))
|
||||
(begin
|
||||
(set! deviation (- (car nums) mean))
|
||||
(set! average_deviation (+ average_deviation (abs deviation)))
|
||||
(set! variance (+ variance (expt deviation 2)))
|
||||
(set! skew (+ skew (expt deviation 3)))
|
||||
(set! kurtosis (+ kurtosis (expt deviation 4)))
|
||||
(loop (cdr nums)))
|
||||
#t))
|
||||
(let loop ((line (read-line)) (numlist '()) (sum 0.0))
|
||||
(cond ((not (eof-object? line))
|
||||
(let ((num (string->number line)))
|
||||
(loop (read-line) (cons num numlist) (+ num sum))))
|
||||
(else
|
||||
(unless (null? numlist)
|
||||
(let* ((n (length numlist))
|
||||
(mean (/ sum n)))
|
||||
(let loop ((nums numlist)
|
||||
(average_deviation 0.0)
|
||||
(variance 0.0)
|
||||
(skew 0.0)
|
||||
(kurtosis 0.0)
|
||||
(deviation 0.0))
|
||||
(if (not (null? nums))
|
||||
(loop (cdr nums)
|
||||
(+ average_deviation (abs deviation))
|
||||
(+ variance (expt deviation 2))
|
||||
(+ skew (expt deviation 3))
|
||||
(+ kurtosis (expt deviation 4))
|
||||
(- (car nums) mean))
|
||||
(let* ((average_deviation (/ average_deviation (exact->inexact n)))
|
||||
(variance (/ variance (- n 1)))
|
||||
(standard_deviation (flsqrt variance))
|
||||
(numlist (sort numlist (lambda (x y) (< x y)))))
|
||||
|
||||
(set! average_deviation (/ average_deviation (exact->inexact n)))
|
||||
(set! variance (/ variance (- n 1)))
|
||||
(set! standard_deviation (flsqrt variance))
|
||||
(cond ((> variance 0.0)
|
||||
(set! skew (/ skew (* n variance standard_deviation)))
|
||||
(set! kurtosis (- (/ kurtosis (* n variance variance))
|
||||
3.0))))
|
||||
|
||||
(cond ((> variance 0.0)
|
||||
(set! skew (/ skew (* n variance standard_deviation)))
|
||||
(set! kurtosis (- (/ kurtosis (* n variance variance))
|
||||
3.0))))
|
||||
|
||||
(set! numlist (sort numlist (lambda (x y) (< x y))))
|
||||
|
||||
(let ((mid (quotient n 2)))
|
||||
(if (zero? (modulo n 2))
|
||||
(set! median (/ (+ (car (list-tail numlist mid))
|
||||
(car (list-tail numlist (- mid 1))))
|
||||
2.0))
|
||||
(set! median (car (list-tail numlist mid)))))
|
||||
|
||||
|
||||
(set! standard_deviation (/ (round (* standard_deviation 1000000))
|
||||
1000000))
|
||||
|
||||
(for-each display
|
||||
`("n: " ,n "\n"
|
||||
"median: " ,(to-str median) "\n"
|
||||
"mean: " ,(to-str mean) "\n"
|
||||
"average_deviation: " ,(to-str average_deviation ) "\n"
|
||||
"standard_deviation: " ,(to-str standard_deviation) "\n"
|
||||
"variance: " ,(to-str variance)"\n"
|
||||
"skew: " ,(to-str skew) "\n"
|
||||
"kurtosis: " ,(to-str kurtosis)"\n" ))))))
|
||||
(let* ((mid (quotient n 2))
|
||||
(median (if (zero? (modulo n 2))
|
||||
(/ (+ (car (list-tail numlist mid))
|
||||
(car (list-tail numlist (- mid 1))))
|
||||
2.0)
|
||||
(car (list-tail numlist mid))))
|
||||
(standard_deviation (/ (round (* standard_deviation 1000000))
|
||||
1000000)))
|
||||
|
||||
(for-each display
|
||||
`("n: " ,n "\n"
|
||||
"median: " ,(to-str median) "\n"
|
||||
"mean: " ,(to-str mean) "\n"
|
||||
"average_deviation: " ,(to-str average_deviation ) "\n"
|
||||
"standard_deviation: " ,(to-str standard_deviation) "\n"
|
||||
"variance: " ,(to-str variance)"\n"
|
||||
"skew: " ,(to-str skew) "\n"
|
||||
"kurtosis: " ,(to-str kurtosis)"\n" )))))))))))
|
||||
|
|
|
@ -7,66 +7,57 @@
|
|||
(: to-str (Number -> String))
|
||||
(define (to-str n) (real->decimal-string n 6))
|
||||
|
||||
(let*: ((sum : Float 0.0)
|
||||
(numlist : (Listof Float)
|
||||
(let: loop : (Listof Float)
|
||||
((line : String (read-line))
|
||||
(numlist : (Listof Float) '()))
|
||||
(cond ((eof-object? line) numlist)
|
||||
(else
|
||||
(let ((num (exact->inexact (assert (string->number line) real?))))
|
||||
(set! sum (+ num sum))
|
||||
(loop (read-line) (cons num numlist))))))))
|
||||
(unless (null? numlist)
|
||||
(let ((n (length numlist)))
|
||||
(let: ((mean : Float (/ sum (exact->inexact n)))
|
||||
(average_deviation : Float 0.0)
|
||||
(standard_deviation : Float 0.0)
|
||||
(variance : Float 0.0)
|
||||
(skew : Float 0.0)
|
||||
(kurtosis : Float 0.0)
|
||||
(median : Float 0.0)
|
||||
(deviation : Float 0.0))
|
||||
(let loop ((nums numlist))
|
||||
(if (not (null? nums))
|
||||
(begin
|
||||
(set! deviation (- (car nums) mean))
|
||||
(set! average_deviation (+ average_deviation (abs deviation)))
|
||||
(set! variance (+ variance (expt deviation 2)))
|
||||
(set! skew (+ skew (expt deviation 3)))
|
||||
(set! kurtosis (+ kurtosis (expt deviation 4)))
|
||||
(loop (cdr nums)))
|
||||
#t))
|
||||
(let: loop : Void
|
||||
((line : (U String EOF) (read-line))
|
||||
(numlist : (Listof Float) '())
|
||||
(sum : Float 0.0))
|
||||
(cond ((not (eof-object? line))
|
||||
(let ((num (exact->inexact (assert (string->number line) real?))))
|
||||
(loop (read-line) (cons num numlist) (+ num sum))))
|
||||
(else
|
||||
(unless (null? numlist)
|
||||
(let* ((n (length numlist))
|
||||
(mean (/ sum (exact->inexact n))))
|
||||
(let: loop : Void
|
||||
((nums : (Listof Float) numlist)
|
||||
(average_deviation : Float 0.0)
|
||||
(variance : Float 0.0)
|
||||
(skew : Float 0.0)
|
||||
(kurtosis : Float 0.0)
|
||||
(deviation : Float 0.0))
|
||||
(if (not (null? nums))
|
||||
(loop (cdr nums)
|
||||
(+ average_deviation (abs deviation))
|
||||
(+ variance (expt deviation 2))
|
||||
(+ skew (expt deviation 3))
|
||||
(+ kurtosis (expt deviation 4))
|
||||
(- (car nums) mean))
|
||||
(let* ((average_deviation (/ average_deviation (exact->inexact n)))
|
||||
(variance (/ variance (- n 1.0)))
|
||||
(standard_deviation (flsqrt variance))
|
||||
(numlist ((inst sort Float Float) numlist (lambda: ((x : Float) (y : Float))
|
||||
(< x y)))))
|
||||
|
||||
(set! average_deviation (/ average_deviation (exact->inexact n)))
|
||||
(set! variance (/ variance (- n 1)))
|
||||
(set! standard_deviation (flsqrt variance))
|
||||
(cond ((> variance 0.0)
|
||||
(set! skew (exact->inexact (/ skew (* n variance standard_deviation))))
|
||||
(set! kurtosis (- (/ kurtosis (* n variance variance))
|
||||
3.0))))
|
||||
|
||||
(cond ((> variance 0.0)
|
||||
(set! skew (exact->inexact (/ skew (* n variance standard_deviation))))
|
||||
(set! kurtosis (- (/ kurtosis (* n variance variance))
|
||||
3.0))))
|
||||
(let* ((mid (quotient n 2))
|
||||
(median (if (zero? (modulo n 2))
|
||||
(/ (+ (car (list-tail numlist mid))
|
||||
(car (list-tail numlist (assert (- mid 1) exact-nonnegative-integer?))))
|
||||
2.0)
|
||||
(car (list-tail numlist mid))))
|
||||
(standard_deviation (exact->inexact (/ (round (* standard_deviation 1000000))
|
||||
1000000))))
|
||||
|
||||
(set! numlist ((inst sort Float Float) numlist (lambda: ((x : Float) (y : Float))
|
||||
(< x y))))
|
||||
|
||||
(let ((mid (quotient n 2)))
|
||||
(if (zero? (modulo n 2))
|
||||
(set! median (/ (+ (car (list-tail numlist mid))
|
||||
(car (list-tail numlist (assert (- mid 1) exact-nonnegative-integer?))))
|
||||
2.0))
|
||||
(set! median (car (list-tail numlist mid)))))
|
||||
|
||||
|
||||
(set! standard_deviation (exact->inexact (/ (round (* standard_deviation 1000000))
|
||||
1000000)))
|
||||
|
||||
(for-each display
|
||||
`("n: " ,n "\n"
|
||||
"median: " ,(to-str median) "\n"
|
||||
"mean: " ,(to-str mean) "\n"
|
||||
"average_deviation: " ,(to-str average_deviation ) "\n"
|
||||
"standard_deviation: " ,(to-str standard_deviation) "\n"
|
||||
"variance: " ,(to-str variance)"\n"
|
||||
"skew: " ,(to-str skew) "\n"
|
||||
"kurtosis: " ,(to-str kurtosis)"\n" ))))))
|
||||
(for-each display
|
||||
`("n: " ,n "\n"
|
||||
"median: " ,(to-str median) "\n"
|
||||
"mean: " ,(to-str mean) "\n"
|
||||
"average_deviation: " ,(to-str average_deviation ) "\n"
|
||||
"standard_deviation: " ,(to-str standard_deviation) "\n"
|
||||
"variance: " ,(to-str variance)"\n"
|
||||
"skew: " ,(to-str skew) "\n"
|
||||
"kurtosis: " ,(to-str kurtosis)"\n" )))))))))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user