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)