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}}==