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