Unbias a random generator: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: simplified program, added/changed comments and whitespace, used template for the OUTPUTs.) |
|||
Line 399: | Line 399: | ||
5: 19.958% 49.987% |
5: 19.958% 49.987% |
||
6: 16.660% 49.890%</pre> |
6: 16.660% 49.890%</pre> |
||
=={{header|Elena}}== |
|||
{{trans|C#}} |
|||
ELENA 3.2.1 : |
|||
<lang elena>import extensions. |
|||
int extension $op |
|||
{ |
|||
bool randN |
|||
= randomGenerator nextInt(self) == 0. |
|||
bool unbiased |
|||
[ |
|||
bool flip1 := self randN. |
|||
bool flip2 := self randN. |
|||
while (flip1 == flip2) |
|||
[ |
|||
flip1 := self randN. |
|||
flip2 := self randN. |
|||
]. |
|||
^ flip1 |
|||
] |
|||
} |
|||
program = |
|||
[ |
|||
3 to:6 do(&int:n) |
|||
[ |
|||
int biasedZero := 0. |
|||
int biasedOne := 0. |
|||
int unbiasedZero := 0. |
|||
int unbiasedOne := 0. |
|||
0 till:100000 do(:i) |
|||
[ |
|||
if (n randN) [ biasedOne += 1 ]; [ biasedZero += 1 ]. |
|||
if (n unbiased) [ unbiasedOne += 1 ]; [ unbiasedZero += 1 ] |
|||
]. |
|||
console |
|||
printLineFormatted("(N = {0}):" padRight(17) + "# of 0"$9"# of 1"$9"% of 0"$9"% of 1", n); |
|||
printLineFormatted("Biased:" padRight(15) + "{0}"$9"{1}"$9"{2}"$9"{3}", |
|||
biasedZero, biasedOne, biasedZero / 1000, biasedOne / 1000); |
|||
printLineFormatted("Unbiased:" padRight(15) + "{0}"$9"{1}"$9"{2}"$9"{3}", |
|||
unbiasedZero, unbiasedOne, unbiasedZero / 1000, unbiasedOne / 1000). |
|||
] |
|||
].</lang> |
|||
{{out}} |
|||
<pre> |
|||
(N = 3): # of 0 # of 1 % of 0 % of 1 |
|||
Biased: 66793 33207 66 33 |
|||
Unbiased: 49965 50035 49 50 |
|||
(N = 4): # of 0 # of 1 % of 0 % of 1 |
|||
Biased: 75233 24767 75 24 |
|||
Unbiased: 50106 49894 50 49 |
|||
(N = 5): # of 0 # of 1 % of 0 % of 1 |
|||
Biased: 80209 19791 80 19 |
|||
Unbiased: 50080 49920 50 49 |
|||
(N = 6): # of 0 # of 1 % of 0 % of 1 |
|||
Biased: 83349 16651 83 16 |
|||
Unbiased: 49699 50301 49 50 |
|||
</pre> |
|||
=={{header|Elixir}}== |
=={{header|Elixir}}== |