Unbias a random generator: Difference between revisions
Content added Content deleted
m (→{{header|Java}}: Removed duplicate Kotlin entry which was entangled with Java.) |
(Added Wren) |
||
Line 2,037: | Line 2,037: | ||
(Biased: 83449): 83449 16551 83.449 16.551 |
(Biased: 83449): 83449 16551 83.449 16.551 |
||
(UnBiased: 49907):49907 50093 49.907 50.093</pre> |
(UnBiased: 49907):49907 50093 49.907 50.093</pre> |
||
=={{header|Wren}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Wren-fmt}} |
|||
<lang ecmascript>import "random" for Random |
|||
import "/fmt" for Fmt |
|||
var rand = Random.new() |
|||
var biased = Fn.new { |n| rand.float() < 1 / n } |
|||
var unbiased = Fn.new { |n| |
|||
while (true) { |
|||
var a = biased.call(n) |
|||
var b = biased.call(n) |
|||
if (a != b) return a |
|||
} |
|||
} |
|||
var m = 50000 |
|||
var f = "$d: $2.2f\% $2.2f\%" |
|||
for (n in 3..6) { |
|||
var c1 = 0 |
|||
var c2 = 0 |
|||
for (i in 0...m) { |
|||
if (biased.call(n)) c1 = c1 + 1 |
|||
if (unbiased.call(n)) c2 = c2 + 1 |
|||
} |
|||
Fmt.print(f, n, 100 * c1 / m, 100 * c2 / m) |
|||
}</lang> |
|||
{{out}} |
|||
Sample output: |
|||
<pre> |
|||
3: 33.36% 49.91% |
|||
4: 24.80% 49.89% |
|||
5: 20.07% 49.95% |
|||
6: 16.64% 50.17% |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |