racket - 4294967087 作为 Racket(随机)函数的参数限制有什么意义?

标签 racket

使用 random 在 Racket 中生成随机整数时函数,Racket 要求参数是 1 之间的数字和 4294967087 .我只是想知道, 在哪里? 4294967087 数字来自,为什么它是 Racket 可以生成的最大随机数?

它接近但不完全等于无符号 32 位整数 (4294967295) 的最大值。我认为一定有某种原因为什么选择了这样一个特定的数字?

最佳答案

是最大的safe prime这仍然小于 232-1。它是 Pierre L'Ecuyer 最初实现的 MRG32k3a 算法的一部分。

这个数字的意义在他的论文“Good Parameter Sets for Combined Multiple Recursive Random Number Generators”中有解释,该论文可在 papers website of L'Ecuyer 上找到。 (作为后记文件),以及 http://pubsonline.informs.org/doi/abs/10.1287/opre.47.1.159 处的 PDF . MRG32k3a 算法的引用实现也可在此处获得:http://www.iro.umontreal.ca/~lecuyer/myftp/papers/combmrg2.c

在本文中,L'Ecuyer 分析了多个递归随机数生成器,并详尽搜索了使生成器具有理想属性的参数集:周期长、数字分布良好、实现高效……

有问题的值(在论文中称为 231-209)是具有这些属性的 MRG32k3a 算法的参数集的一部分。

(但不可否认,我没有做数学......)

关于racket - 4294967087 作为 Racket(随机)函数的参数限制有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38296701/

相关文章:

mapping - 方案:映射 let 和 set!上 list

unit-testing - 在 Racket 中通过一次测试检查多个输出

scheme - 检查参数是否是点对而不是列表

lisp - 一个基本的 Lisp 程序错误

多维向量运算的 Racket-y 方式?

parallel-processing - 如何在 Racket 中并行地将函数映射到列表上?

racket - 如何在 REPL 中打开函数的文档?

functional-programming - Racket - Closure/Currying,区别在哪里?

scheme - 如何使用方案在另一个函数中调用一个函数?

racket - 如何在Racket中获取文件的修改日期?