73 lines
1.5 KiB
Text
73 lines
1.5 KiB
Text
normalStats(100)
|
|
print
|
|
normalStats(1000)
|
|
print
|
|
normalStats(10000)
|
|
print
|
|
normalStats(100000)
|
|
end
|
|
|
|
sub randomNormal()
|
|
local u1, u2
|
|
u1 = ran()
|
|
u2 = ran()
|
|
return cos(2 * pi * u1) * sqrt(-2 * log(u2))
|
|
end sub
|
|
|
|
sub normalStats(n)
|
|
local r(n), h(11)
|
|
local i, sum, hSum, mean, sd, scale, stars
|
|
sum = 0
|
|
hSum = 0
|
|
|
|
// Generate samples: mean 0.5, std 0.25
|
|
for i = 1 to n
|
|
r(i) = 0.5 + randomNormal() / 4
|
|
sum = sum + r(i)
|
|
|
|
if r(i) < 0 then
|
|
h(0) = h(0) + 1
|
|
elsif r(i) >= 1 then
|
|
h(11) = h(11) + 1
|
|
else
|
|
h(int(r(i)*10)+1) = h(int(r(i)*10)+1) + 1
|
|
fi
|
|
next i
|
|
|
|
for i = 0 to 11
|
|
hSum = hSum + h(i)
|
|
next i
|
|
|
|
mean = sum / n
|
|
|
|
// Standard deviation
|
|
sum = 0
|
|
for i = 1 to n
|
|
sum = sum + (r(i) - mean)^2
|
|
next i
|
|
sd = sqrt(sum / n)
|
|
|
|
print "Sample size ", n
|
|
print
|
|
print " Mean ", mean using("#.######");
|
|
print " SD ", sd using("#.######")
|
|
print
|
|
|
|
// Histogram (scale for large samples)
|
|
scale = 1
|
|
if n > 300 scale = 300 / n
|
|
|
|
for i = 0 to 11
|
|
if i = 0 then
|
|
print "< 0.00 : ", h(0) using("#####"), " ";
|
|
elsif i = 11 then
|
|
print ">=1.00 : ", h(1) using("#####");
|
|
else
|
|
//print using(" #.## : ##### ", (i-1)/10); h(i);
|
|
print " ", (i-1)/10 using("#.##"), " : ", h(i) using("#####"), " ";
|
|
fi
|
|
|
|
stars = int(h(i) * scale + 0.5)
|
|
print string$(stars, "*")
|
|
next i
|
|
end sub
|