Unbias a random generator: Difference between revisions
Content added Content deleted
(→{{header|Perl 6}}: Added Perl 6 solution) |
(adding gap) |
||
Line 115: | Line 115: | ||
5: 19.971% 49.987% |
5: 19.971% 49.987% |
||
6: 16.688% 50.097%</pre> |
6: 16.688% 50.097%</pre> |
||
=={{header|GAP}}== |
|||
<lang gap>RandNGen := function(n) |
|||
local v, rand; |
|||
v := [1 .. n - 1]*0; |
|||
Add(v, 1); |
|||
rand := function() |
|||
return Random(v); |
|||
end; |
|||
return rand; |
|||
end; |
|||
UnbiasedGen := function(rand) |
|||
local unbiased; |
|||
unbiased := function() |
|||
local a, b; |
|||
while true do |
|||
a := rand(); |
|||
b := rand(); |
|||
if a <> b then |
|||
break; |
|||
fi; |
|||
od; |
|||
return a; |
|||
end; |
|||
return unbiased; |
|||
end; |
|||
a := RandNGen(2); |
|||
b := RandNGen(5); |
|||
c := UnbiasedGen(a); |
|||
d := UnbiasedGen(b); |
|||
Sum([1 .. 1000000], n -> a()); |
|||
# 500105 |
|||
Sum([1 .. 1000000], n -> b()); |
|||
# 200512 |
|||
Sum([1 .. 1000000], n -> c()); |
|||
# 500158 |
|||
Sum([1 .. 1000000], n -> d()); |
|||
# 499752</lang> |
|||
=={{header|J}}== |
=={{header|J}}== |