Unbias a random generator: Difference between revisions

m
Line 699:
unbiased g = do x <- g
y <- g
if x /= y then return y else unbiasunbiased g</lang>
 
Examples of use:
<pre>λ> replicateM 20 (unbiased (randN 5))
[0,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,1,0]
λ> replicateM 20 (unbiasunbiased (fromList [(True,10),(False,1)]))
[True,True,False,True,True,True,False,True,False,True,True,False,False,True,False,True,True,False,False,True]</pre>
 
Line 712:
showCounts b = do
r1 <- counts (randN b)
r2 <- counts (unbiasunbiased (randN b))
printf "n = %d biased: %d%% unbiased: %d%%\n" b r1 r2
Anonymous user