Random numbers: Difference between revisions
Content added Content deleted
(added MiniScript example) |
No edit summary |
||
Line 1,183: | Line 1,183: | ||
normal.add(1 + sqrt(-2 * log(randf())) * cos(2 * PI * randf()) / 2) |
normal.add(1 + sqrt(-2 * log(randf())) * cos(2 * PI * randf()) / 2) |
||
end repeat</lang> |
end repeat</lang> |
||
=={{header|Lobster}}== |
|||
Uses built-in <code>rnd_gaussian</code> |
|||
<lang Lobster> |
|||
let mean = 1.0 |
|||
let stdv = 0.5 |
|||
let count = 1000 |
|||
// stats computes a running mean and variance |
|||
// See Knuth TAOCP vol 2, 3rd edition, page 232 |
|||
def stats(xs: [float]) -> float, float: // variance, mean |
|||
var M = xs[0] |
|||
var S = 0.0 |
|||
var n = 1.0 |
|||
for(xs.length - 1) i: |
|||
let x = xs[i + 1] |
|||
n = n + 1.0 |
|||
let mm = (x - M) |
|||
M += mm / n |
|||
S += mm * (x - M) |
|||
return (if n > 0.0: S / n else: 0.0), M |
|||
def test_random_normal() -> [float]: |
|||
rnd_seed(floor(seconds_elapsed() * 1000000)) |
|||
let r = vector_reserve(typeof return, count) |
|||
for (count): |
|||
r.push(rnd_gaussian() * stdv + mean) |
|||
let cvar, cmean = stats(r) |
|||
let cstdv = sqrt(cvar) |
|||
print concat_string(["Mean: ", string(cmean), ", Std.Deviation: ", string(cstdv)], "") |
|||
test_random_normal() |
|||
</lang> |
|||
=={{header|Lua}}== |
=={{header|Lua}}== |