Unbias a random generator: Difference between revisions
Content added Content deleted
Line 2,015: | Line 2,015: | ||
unbiased 6 => #0=500518 #1=499482 ratio=49.95% |
unbiased 6 => #0=500518 #1=499482 ratio=49.95% |
||
</pre> |
</pre> |
||
=={{header|Visual Basic .NET}}== |
|||
{{trans|C#}} |
|||
<lang vbnet>Module Module1 |
|||
Dim random As New Random() |
|||
Function RandN(n As Integer) As Boolean |
|||
Return random.Next(0, n) = 0 |
|||
End Function |
|||
Function Unbiased(n As Integer) As Boolean |
|||
Dim flip1 As Boolean |
|||
Dim flip2 As Boolean |
|||
Do |
|||
flip1 = RandN(n) |
|||
flip2 = RandN(n) |
|||
Loop While flip1 = flip2 |
|||
Return flip1 |
|||
End Function |
|||
Sub Main() |
|||
For n = 3 To 6 |
|||
Dim biasedZero = 0 |
|||
Dim biasedOne = 0 |
|||
Dim unbiasedZero = 0 |
|||
Dim unbiasedOne = 0 |
|||
For i = 1 To 100000 |
|||
If RandN(n) Then |
|||
biasedOne += 1 |
|||
Else |
|||
biasedZero += 1 |
|||
End If |
|||
If Unbiased(n) Then |
|||
unbiasedOne += 1 |
|||
Else |
|||
unbiasedZero += 1 |
|||
End If |
|||
Next |
|||
Console.WriteLine("(N = {0}):".PadRight(17) + "# of 0" + vbTab + "# of 1" + vbTab + "% of 0" + vbTab + "% of 1", n) |
|||
Console.WriteLine("(Biased: {0}):".PadRight(15) + "{0}" + vbTab + "{1}" + vbTab + "{2}" + vbTab + "{3}", biasedZero, biasedOne, biasedZero / 1000, biasedOne / 1000) |
|||
Console.WriteLine("(UnBiased: {0}):".PadRight(15) + "{0}" + vbTab + "{1}" + vbTab + "{2}" + vbTab + "{3}", unbiasedZero, unbiasedOne, unbiasedZero / 1000, unbiasedOne / 1000) |
|||
Next |
|||
End Sub |
|||
End Module</lang> |
|||
{{out}} |
|||
<pre>(N = 3): # of 0 # of 1 % of 0 % of 1 |
|||
(Biased: 66844): 66844 33156 66.844 33.156 |
|||
(UnBiased: 50081):50081 49919 50.081 49.919 |
|||
(N = 4): # of 0 # of 1 % of 0 % of 1 |
|||
(Biased: 74827): 74827 25173 74.827 25.173 |
|||
(UnBiased: 50095):50095 49905 50.095 49.905 |
|||
(N = 5): # of 0 # of 1 % of 0 % of 1 |
|||
(Biased: 79878): 79878 20122 79.878 20.122 |
|||
(UnBiased: 50544):50544 49456 50.544 49.456 |
|||
(N = 6): # of 0 # of 1 % of 0 % of 1 |
|||
(Biased: 83449): 83449 16551 83.449 16.551 |
|||
(UnBiased: 49907):49907 50093 49.907 50.093</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |