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. |
ELENA 3.4 : |
||
<lang elena>import extensions. |
<lang elena>import extensions. |
||
int |
extension<int> op |
||
{ |
{ |
||
bool randN |
bool randN |
||
= randomGenerator nextInt(self) == 0. |
= randomGenerator nextInt(self) == 0. |
||
bool unbiased |
bool unbiased |
||
[ |
[ |
||
bool flip1 := self randN. |
bool flip1 := self randN. |
||
bool flip2 := self randN. |
bool flip2 := self randN. |
||
while (flip1 == flip2) |
while (flip1 == flip2) |
||
[ |
[ |
||
Line 415: | Line 415: | ||
flip2 := self randN. |
flip2 := self randN. |
||
]. |
]. |
||
^ flip1 |
^ flip1 |
||
] |
] |
||
} |
} |
||
public program |
|||
[ |
[ |
||
3 to:6 do(:n)<int> |
3 to:6 do(:n)<int> |
||
Line 428: | Line 428: | ||
int unbiasedZero := 0. |
int unbiasedZero := 0. |
||
int unbiasedOne := 0. |
int unbiasedOne := 0. |
||
0 till:100000 do(:i) |
0 till:100000 do(:i) |
||
[ |
[ |
||
Line 434: | Line 434: | ||
if (n unbiased) [ unbiasedOne += 1 ]; [ unbiasedZero += 1 ] |
if (n unbiased) [ unbiasedOne += 1 ]; [ 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); |
||
Line 442: | Line 442: | ||
unbiasedZero, unbiasedOne, unbiasedZero / 1000, unbiasedOne / 1000). |
unbiasedZero, unbiasedOne, unbiasedZero / 1000, unbiasedOne / 1000). |
||
] |
] |
||
] |
]</lang> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre> |