Unbias a random generator: Difference between revisions
Content added Content deleted
Line 1,208: | Line 1,208: | ||
Biased(6) = Stats(count1=167561, count0=832439, percent=16.7561) |
Biased(6) = Stats(count1=167561, count0=832439, percent=16.7561) |
||
Unbiased = Stats(count1=499963, count0=500037, percent=49.996299999999998)</pre> |
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}}== |
=={{header|REXX}}== |