(phixonline)-->
with javascript_semantics
function gaussian(atom mean, atom variance)
return sqrt(-2 * variance * log(rnd())) *
cos(2 * variance * PI * rnd()) + mean
end function
function mean(sequence t)
return sum(t)/length(t)
end function
function std(sequence t)
atom squares = 0,
avg = mean(t)
for i=1 to length(t) do
squares += power(avg-t[i],2)
end for
atom variance = squares/length(t)
return sqrt(variance)
end function
procedure showHistogram(sequence t)
for i=ceil(min(t)) to floor(max(t)) do
integer n = 0
for k=1 to length(t) do
n += ceil(t[k]-0.5)=i
end for
integer l = floor(n/length(t)*200)
printf(1,"%d %s %d\n",{i,repeat('=',l),n})
end for
end procedure
sequence t = repeat(0,100000)
integer avg = 50, variance = 10
for i=1 to length(t) do
t[i] = gaussian(avg, variance)
end for
printf(1,"Mean: %g, expected %g\n",{mean(t),avg})
printf(1,"StdDev: %g, expected %g\n",{std(t),sqrt(variance)})
showHistogram(t)