Project:
 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 ``` ```; george marsaglia's random number generators (define (ipow b e) (cond ((zero? e) 1) ((even? e) (ipow (* b b) (/ e 2))) (else (* b (ipow (* b b) (/ (- e 1) 2)))))) (define (logand a b) (if (or (zero? a) (zero? b)) 0 (+ (* (logand (floor (/ a 2)) (floor (/ b 2))) 2) (if (or (even? a) (even? b)) 0 1)))) (define (logxor a b) (cond ((zero? a) b) ((zero? b) a) (else (+ (* (logxor (floor (/ a 2)) (floor (/ b 2))) 2) (if (even? a) (if (even? b) 0 1) (if (even? b) 1 0)))))) (define (ash int cnt) (if (negative? cnt) (let ((n (ipow 2 (- cnt)))) (if (negative? int) (+ -1 (quotient (+ 1 int) n)) (quotient int n))) (* (ipow 2 cnt) int))) (define mwc #f) (define shr3 #f) (define cong #f) (define fib #f) (define kiss #f) (define lfib4 #f) (define swb #f) (define uni #f) (define vni #f) (define settable #f) (let ((z 362436069) (w 521288629) (jsr 123456789) (jcong 380116160) (a 224466889) (b 7584631) (t (make-vector 256 0)) (x 0) (y 0) (c 0)) (define (mod8 n) (modulo n 256)) (define (mod32 n) (modulo n 4294967296)) (define (ref i) (vector-ref t (mod8 i))) (set! mwc (lambda () (set! z (mod32 (+ (* 36969 (logand z 65535)) (ash z -16)))) (set! w (mod32 (+ (* 18000 (logand w 65535)) (ash w -16)))) (mod32 (+ (ash z 16) w)))) (set! shr3 (lambda () (set! jsr (mod32 (logxor jsr (ash jsr 17)))) (set! jsr (mod32 (logxor jsr (ash jsr -13)))) (set! jsr (mod32 (logxor jsr (ash jsr 5)))) jsr)) (set! cong (lambda () (set! jcong (mod32 (+ (* 69069 jcong) 1234567))) jcong)) (set! fib (lambda () (set! b (mod32 (+ a b))) (set! a (mod32 (- b a))) a)) (set! kiss (lambda () (mod32 (+ (logxor (mwc) (cong)) (shr3))))) (set! lfib4 (lambda () (set! c (mod8 (+ c 1))) (vector-set! t c (mod32 (+ (ref c) (ref (+ c 58)) (ref (+ c 119)) (ref (+ c 178))))) (ref c))) (set! swb (lambda () (set! c (mod8 (+ c 1))) (let ((bro (if (< x y) 1 0))) (set! x (mod32 (ref (+ c 34)))) (set! y (mod32 (+ (ref (+ c 19)) bro))) (vector-set! t c (mod32 (- x y))) (vector-ref t c)))) (set! uni (lambda () (* (kiss) 2.328306e-10))) (set! vni (lambda () (* (- (kiss) 2147483648) 4.6566133-10))) (set! settable (lambda (i1 i2 i3 i4 i5 i6) (set! z i1) (set! w i2) (set! jsr i3) (set! jcong i4) (set! a i5) (set! b i6) (set! x 0) (set! y 0) (set! c 0) (do ((i 0 (+ i 1))) ((= i 256)) (vector-set! t i (kiss)))))) (define-syntax assert (syntax-rules () ((assert expr result) (if (not (equal? expr result)) (for-each display `( #\newline "failed assertion:" #\newline expr #\newline "expected: " ,result #\newline "returned: " ,expr #\newline)))))) (define (test-rng) (let ((k 0)) (settable 12345 65435 34221 12345 9983651 95746118) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 1064612766)) (set! k (lfib4))) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 627749721)) (set! k (swb))) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 1372460312)) (set! k (kiss))) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 1529210297)) (set! k (cong))) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 2642725982)) (set! k (shr3))) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 904977562)) (set! k (mwc))) (do ((i 0 (+ i 1))) ((= i 1e6) (assert k 3519793928)) (set! k (fib))))) (test-rng) ```
 ```1 ``` ```Timeout ```