33 lines
706 B
Nim
33 lines
706 B
Nim
import math, strutils
|
|
randomize()
|
|
|
|
proc sd(ns): auto =
|
|
var sx, sxx = 0.0
|
|
for x in ns:
|
|
sx += x
|
|
sxx += x * x
|
|
let sd = if ns.len > 0: sqrt(float(ns.len) * sxx - sx * sx) / float(ns.len)
|
|
else: 0
|
|
(sd, sx / float(ns.len))
|
|
|
|
proc histogram(ns) =
|
|
var h = newSeq[int](10)
|
|
for n in ns:
|
|
let pos = int(n * 10)
|
|
inc h[pos]
|
|
|
|
const maxWidth = 50
|
|
let mx = max(h)
|
|
echo ""
|
|
for n, i in h:
|
|
echo n/10,": ",repeatChar(int(i / mx * maxWidth), '+')
|
|
echo ""
|
|
|
|
for i in [10, 100, 1_000, 10_000, 100_000]:
|
|
var n = newSeq[float](i)
|
|
for x in 0..n.high: n[x] = random(1.0)
|
|
echo "\n##\n## ",i," numbers\n##"
|
|
let (sd, mean) = sd(n)
|
|
echo "sd: ",sd,", mean: ",mean
|
|
histogram(n)
|