(Arne Babenhauserheide)
2017-04-28: correctly report the std for 1 or 0 values as inf correctly report the std for 1 or 0 values as inf
diff --git a/examples/unbiased-std.w b/examples/unbiased-std.w
--- a/examples/unbiased-std.w
+++ b/examples/unbiased-std.w
@@ -14,13 +14,17 @@ define factors⁻¹
10 . 0.9726592741
define : std . vals
- let*
- : len (length vals)
- mean (/ (apply + vals) len)
- factor (or (assoc-ref factors⁻¹ len) 1)
- * (/ 1 factor) : sqrt : * (/ 1 (- len 1)) : apply + : map (λ(x) (expt (- x mean) 2)) vals .
+ . "Calculate the unbiased standard deviation of the values (the biased std for more than 10 values)."
+ let : : len : length vals
+ if : < len 2
+ . +inf.0
+ let
+ : mean (/ (apply + vals) len)
+ factor (or (assoc-ref factors⁻¹ len) 1)
+ * (/ 1 factor) : sqrt : * (/ 1 (- len 1)) : apply + : map (λ(x) (expt (- x mean) 2)) vals .
;; quick test
let : : res : std 0 0 3
when : not : > 0.01 : abs : - res : * 1.129 : sqrt 3 ;; calculated by hand
format #t "Bug: (std 0 0 3) gives ~a instead of 1.995\n" res
+