我正在尝试在球拍中生成一个非常大的随机数,介于0到1e20之间。
(random)
的限制范围为1到4294967087。
我创建了一个hack-y函数,该函数尝试生成随机数,但仅基于幅度的顺序而不是实际数字。这是该功能:
define (l-random [min 0] [max 10])
(define length (random (number-length min) (number-length max)))
(define string "")
(for ([i length])
(set! string (format "~a~a" string (random 0 10))))
(string->number string))
这是我计算数量级的方法:
(define (number-length number)
(cond [(= 0 number) 1]
[else (+ 1 (exact-floor (log (abs number) 10)))]))
您有什么建议或解决方案吗?谢谢!
答案 0 :(得分:0)
“科学收藏”中的Random Number Generation module正是您所需要的。这是DrRacket副本的示例(每个规范最多1e20):
Welcome to DrRacket, version 6.3 [3m].
Language: racket; memory limit: 256 MB.
> (require (planet williams/science/random-source))
> (random-integer (expt 10 20))
79219429305569404064
哪一秒能跑完!