Unbias a random generator: Difference between revisions

m
Line 397:
=={{header|Elena}}==
{{trans|C#}}
ELENA 3.4.x :
<lang elena>import extensions.;
extension<int> op : IntNumber
{
bool randN()
= randomGenerator .nextInt(self) == 0.;
get bool unbiased Unbiased()
[{
bool flip1 := self randN.randN();
bool flip2 := self randN.randN();
while (flip1 == flip2)
[{
flip1 := self randN.randN();
flip2 := self randN.randN()
].};
^ flip1
]}
}
public program()
{
[
3for(int n to:= 3, n <= 6, do(:n += 1)<int>
[{
int biasedZero := 0.;
int biasedOne := 0.;
int unbiasedZero := 0.;
int unbiasedOne := 0.;
0for(int i till:= 0, i < 100000, do(:i += 1)
[{
if (n .randN()) [{ biasedOne += 1 ];} [else { biasedZero += 1 ].};
if (n unbiased.Unbiased) [{ unbiasedOne += 1 ];} else [{ 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>
Anonymous user