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}}==