【问题标题】:Scheme:R5RS:: Make it ten-thousandth place value方案:R5RS:: 使其成为万位值
【发布时间】:2020-03-04 03:46:43
【问题描述】:
(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)

但输出必须是

(stream->list (prng 3) 5)
> (0.01585 0.4954 0.9988 0.7253 0.0307)

如何输出到万位值?

【问题讨论】:

  • 请粘贴您从 sicp 复制的所有内容,因为我的感觉是您没有在代码中完全复制某些内容
  • 注意第一个数字应该是0.0159

标签: scheme racket r5rs


【解决方案1】:

这是一种方法,如果您使用的是 Racket:

(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)))

现在输出将是:

'(0.0159 0.4954 0.9988 0.7253 0.0307)

【讨论】:

  • @Honolulu 这篇文章解决了你的问题吗?如果是这样,请不要忘记accept它,只需单击其左侧的复选标记;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2014-07-28
  • 2012-10-28
  • 2015-03-24
  • 2012-09-06
  • 2012-03-16
相关资源
最近更新 更多