Random numbers from a deterministic equation
A pseudo-random number generator based on the logistic map equation:
(define (logistic-map r x cb)
(let ((xt x))
(lambda ()
(set! xt (* r xt (- 1 xt)))
(cb xt)
xt)))
(define seed 0.2)
;; Returns a random number generator by initializing r to 4, so that
;; the sequence is chaotic.
(define (mk-rand)
(logistic-map 4 seed (lambda (x) (set! seed x))))
;; tests
;; The user need not specify a seed, he gets a fully constructed
;; random number generator wrapped up in a procedure.
> (define r1 (mk-rand))
> (r1)
0.6400000000000001
> (r1)
0.9215999999999999
;; New random number generators are independent of the previous ones
> (define r2 (mk-rand))
> (r2)
0.585420538734196
> (r2)
0.970813326249439