Unbias a random generator: Difference between revisions

Content added Content deleted
Line 397: Line 397:
=={{header|Elena}}==
=={{header|Elena}}==
{{trans|C#}}
{{trans|C#}}
ELENA 3.4 :
ELENA 4.x :
<lang elena>import extensions.
<lang elena>import extensions;
extension<int> op
extension op : IntNumber
{
{
bool randN
bool randN()
= randomGenerator nextInt(self) == 0.
= randomGenerator.nextInt(self) == 0;
bool unbiased
get bool Unbiased()
[
{
bool flip1 := self randN.
bool flip1 := self.randN();
bool flip2 := self randN.
bool flip2 := self.randN();
while (flip1 == flip2)
while (flip1 == flip2)
[
{
flip1 := self randN.
flip1 := self.randN();
flip2 := self randN.
flip2 := self.randN()
].
};
^ flip1
^ flip1
]
}
}
}
public program
public program()
{
[
3 to:6 do(:n)<int>
for(int n := 3, n <= 6, n += 1)
[
{
int biasedZero := 0.
int biasedZero := 0;
int biasedOne := 0.
int biasedOne := 0;
int unbiasedZero := 0.
int unbiasedZero := 0;
int unbiasedOne := 0.
int unbiasedOne := 0;
0 till:100000 do(:i)
for(int i := 0, i < 100000, i += 1)
[
{
if (n randN) [ biasedOne += 1 ]; [ biasedZero += 1 ].
if(n.randN()) { biasedOne += 1 } else { biasedZero += 1 };
if (n unbiased) [ unbiasedOne += 1 ]; [ unbiasedZero += 1 ]
if(n.Unbiased) { unbiasedOne += 1 } else { unbiasedZero += 1 }
].
};
console
console
printLineFormatted("(N = {0}):" padRight(17) + "# of 0"$9"# of 1"$9"% of 0"$9"% of 1", n);
.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}",
.printLineFormatted("Biased:".padRight(15) + "{0}"$9"{1}"$9"{2}"$9"{3}",
biasedZero, biasedOne, biasedZero / 1000, biasedOne / 1000);
biasedZero, biasedOne, biasedZero / 1000, biasedOne / 1000)
printLineFormatted("Unbiased:" padRight(15) + "{0}"$9"{1}"$9"{2}"$9"{3}",
.printLineFormatted("Unbiased:".padRight(15) + "{0}"$9"{1}"$9"{2}"$9"{3}",
unbiasedZero, unbiasedOne, unbiasedZero / 1000, unbiasedOne / 1000).
unbiasedZero, unbiasedOne, unbiasedZero / 1000, unbiasedOne / 1000)
]
}
]</lang>
}</lang>
{{out}}
{{out}}
<pre>
<pre>