Scheme 方案:R5RS::使其成为第万位值
当我运行这段代码时,我的当前输出是Scheme 方案:R5RS::使其成为第万位值,scheme,racket,r5rs,Scheme,Racket,R5rs,当我运行这段代码时,我的当前输出是 (define m (expt 2 32)) (define a 22695477) (define c 1.0) (define (integers-starting-from n) (stream-cons n (integers-starting-from (+ n 1)))) (define (prng seed) (define xn (remainder (+ c (* a seed)) m)) (define prn (/ (
(define m (expt 2 32))
(define a 22695477)
(define c 1.0)
(define (integers-starting-from n)
(stream-cons n (integers-starting-from (+ n 1))))
(define (prng seed)
(define xn (remainder (+ c (* a seed)) m))
(define prn (/ (remainder (+ c (* a seed)) m) m))
(stream-cons prn
(prng xn)))
但产出必须有所提高
(stream->list (prng 3) 5)
> (0.015852607786655426 0.4954120593611151 0.998752823099494 0.7253396362066269 0.03071586787700653)
如何将输出设置为第万位值?如果您使用的是Racket,这里有一种方法:
(stream->list (prng 3) 5)
> (0.01585 0.4954 0.9988 0.7253 0.0307)
现在输出为:
(define (prng seed)
(define xn (remainder (+ c (* a seed)) m))
(define prn (/ (remainder (+ c (* a seed)) m) m))
(stream-cons (truncate prn 4)
(prng xn)))
(define (truncate num precision)
(string->number (~r num #:precision precision)))
请粘贴您从sicp复制的所有内容,因为我的感觉是您没有完全复制代码中的某些内容请注意,第一个数字应该是
0.0159
@Honolulu这篇文章解决了您的问题吗?如果是这样,请不要忘记,只需单击其左侧的复选标记;)。
'(0.0159 0.4954 0.9988 0.7253 0.0307)