21 lines
526 B
Racket
21 lines
526 B
Racket
#lang racket
|
|
(require racket/generator)
|
|
|
|
(define (bsd-update state_n)
|
|
(modulo (+ (* 1103515245 state_n) 12345)
|
|
(expt 2 31)))
|
|
|
|
(define (ms-update state_n)
|
|
(modulo (+ (* 214013 state_n) 2531011)
|
|
(expt 2 31)))
|
|
|
|
(define ((rand update ->rand) seed)
|
|
(generator ()
|
|
(let loop ([state_n seed])
|
|
(define state_n+1 (update state_n))
|
|
(yield (->rand state_n+1))
|
|
(loop state_n+1))))
|
|
|
|
(define bsd-rand (rand bsd-update identity))
|
|
(define ms-rand (rand ms-update (λ (x) (quotient x (expt 2 16)))))
|