Unbias a random generator: Difference between revisions
Content added Content deleted
(Updated D entry) |
(Added zkl) |
||
Line 1,421: | Line 1,421: | ||
biased 6 => #0=833623 #1=166377 ratio=16.64% |
biased 6 => #0=833623 #1=166377 ratio=16.64% |
||
unbiased 6 => #0=500518 #1=499482 ratio=49.95% |
unbiased 6 => #0=500518 #1=499482 ratio=49.95% |
||
</pre> |
|||
=={{header|zkl}}== |
|||
<lang zkl>fcn randN(N){ (not (0).random(N)).toInt() } |
|||
fcn unbiased(randN){ while((a:=randN())==randN()){} a }</lang> |
|||
<lang zkl>const Z=0d100_000; |
|||
foreach N in ([3..6]){ |
|||
"%d: biased: %3.2f%%, unbiased: %3.2f%%".fmt(N, |
|||
(0).reduce(Z,'wrap(s,_){ s+randN(N) },0.0)/Z*100, |
|||
(0).reduce(Z,'wrap(s,_){ s+unbiased(randN.fp(N)) },0.0)/Z*100) |
|||
.println(); |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
3: biased: 33.46%, unbiased: 49.80% |
|||
4: biased: 24.95%, unbiased: 50.01% |
|||
5: biased: 19.89%, unbiased: 50.18% |
|||
6: biased: 16.75%, unbiased: 50.22% |
|||
</pre> |
</pre> |
||