Unbias a random generator: Difference between revisions

Line 1,208:
Biased(6) = Stats(count1=167561, count0=832439, percent=16.7561)
Unbiased = Stats(count1=499963, count0=500037, percent=49.996299999999998)</pre>
 
=={{header|Racket}}==
<lang racket>
#lang racket
 
;; Using boolean #t/#f instead of 1/0
 
(define ((randN n)) (zero? (random n)))
(define (unbiased biased)
(let loop () (let ([r (biased)]) (if (eq? r (biased)) (loop) r))))
 
(define N 1000000)
(for ([n (in-range 3 7)])
(define biased (randN n))
(define nb 0)
(define nu 0)
(for ([i N])
(when (biased) (set! nb (+ 1 nb)))
(when (unbiased biased) (set! nu (+ 1 nu))))
(printf "Count: ~a => Biased: ~a%; Unbiased: ~a%.\n"
n (round (/ nb N 1/100)) (round (/ nu N 1/100))))
</lang>
{{out}}
<pre>
Count: 3 => Biased: 33%; Unbiased: 50%.
Count: 4 => Biased: 25%; Unbiased: 50%.
Count: 5 => Biased: 20%; Unbiased: 50%.
Count: 6 => Biased: 17%; Unbiased: 50%.
</pre>
 
=={{header|REXX}}==