Unbias a random generator: Difference between revisions

Add Seed7 example
(Smaller equations.)
(Add Seed7 example)
Line 668:
Biased(6) = Stats(count1=167561, count0=832439, percent=16.7561)
Unbiased = Stats(count1=499963, count0=500037, percent=49.996299999999998)</pre>
 
=={{header|Seed7}}==
<lang seed7>$ include "seed7_05.s7i";
include "float.s7i";
 
const func integer: randN (in integer: n) is
return ord(rand(1, n) = 1);
 
const func integer: unbiased (in integer: n) is func
result
var integer: unbiased is 0;
begin
repeat
unbiased := randN(n);
until unbiased <> randN(n);
end func;
 
const proc: main is func
local
const integer: tests is 50000;
var integer: n is 0;
var integer: sumBiased is 0;
var integer: sumUnbiased is 0;
var integer: count is 0;
begin
for n range 3 to 6 do
sumBiased := 0;
sumUnbiased := 0;
for count range 1 to tests do
sumBiased +:= randN(n);
sumUnbiased +:= unbiased(n);
end for;
writeln(n <& ": " <& flt(sumBiased) / flt(tests) * 100.0 digits 3 lpad 6 <&
" " <& flt(sumUnbiased) / flt(tests) * 100.0 digits 3 lpad 6);
end for;
end func;</lang>
 
Output:
<pre>
3: 33.004 50.024
4: 25.158 50.278
5: 20.186 49.978
6: 16.570 49.936
</pre>
 
=={{header|Tcl}}==