Unbias a random generator: Difference between revisions
Content added Content deleted
m (→{{header|Java}}: Removed duplicate Kotlin entry which was entangled with Java.) |
|||
Line 1,015: | Line 1,015: | ||
5: 20.05% 50.00% |
5: 20.05% 50.00% |
||
6: 17.00% 49.88%</pre> |
6: 17.00% 49.88%</pre> |
||
jhead=={{header|Kotlin}}== |
|||
{{trans|Java}} |
|||
<lang scala>// version 1.1.2 |
|||
fun biased(n: Int) = Math.random() < 1.0 / n |
|||
fun unbiased(n: Int): Boolean { |
|||
var a: Boolean |
|||
var b: Boolean |
|||
do { |
|||
a = biased(n) |
|||
b = biased(n) |
|||
} |
|||
while (a == b) |
|||
return a |
|||
} |
|||
fun main(args: Array<String>) { |
|||
val m = 50_000 |
|||
val f = "%d: %2.2f%% %2.2f%%" |
|||
for (n in 3..6) { |
|||
var c1 = 0 |
|||
var c2 = 0 |
|||
for (i in 0 until m) { |
|||
if (biased(n)) c1++ |
|||
if (unbiased(n)) c2++ |
|||
} |
|||
println(f.format(n, 100.0 * c1 / m, 100.0 * c2 / m)) |
|||
} |
|||
}</lang> |
|||
Sample output: |
|||
<pre> |
|||
3: 33.19% 50.19% |
|||
4: 25.29% 49.85% |
|||
5: 19.91% 50.07% |
|||
6: 16.71% 50.14% |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |