Unbias a random generator: Difference between revisions
Content added Content deleted
m (Added PowerShell comment) |
(Added F# version) |
||
Line 500: | Line 500: | ||
6: 16.98% 50.05% |
6: 16.98% 50.05% |
||
</pre> |
</pre> |
||
=={{header|F_Sharp|F#}}== |
|||
<lang fsharp>open System |
|||
let random = Random() |
|||
let randN = random.Next >> (=)0 >> Convert.ToInt32 |
|||
let rec unbiased n = |
|||
let a = randN n |
|||
if a <> randN n then a else unbiased n |
|||
[<EntryPoint>] |
|||
let main argv = |
|||
let n = if argv.Length > 0 then UInt32.Parse(argv.[0]) |> int else 100000 |
|||
for b = 3 to 6 do |
|||
let cb = ref 0 |
|||
let cu = ref 0 |
|||
for i = 1 to n do |
|||
cb := !cb + randN b |
|||
cu := !cu + unbiased b |
|||
printfn "%d: %5.2f%% %5.2f%%" |
|||
b (100. * float !cb / float n) (100. * float !cu / float n) |
|||
0</lang> |
|||
{{out}} |
|||
<pre>3: 33.26% 49.97% |
|||
4: 25.02% 50.22% |
|||
5: 19.98% 50.00% |
|||
6: 16.64% 49.69%</pre> |
|||
=={{header|Fortran}}== |
=={{header|Fortran}}== |