【发布时间】:2018-05-23 13:53:06
【问题描述】:
Erlang 的 rand:seed/2 使用 3 个整数作为 RNG 的种子。
而 RNG 实现通常需要 1 个整数作为种子,为什么 Erlang 专门使用 3?
【问题讨论】:
Erlang 的 rand:seed/2 使用 3 个整数作为 RNG 的种子。
而 RNG 实现通常需要 1 个整数作为种子,为什么 Erlang 专门使用 3?
【问题讨论】:
Erlang uses a variant of the Wichmann-Hill algorithm 作为它的 PRNG。这algorithm dates to 1982,当 16 位处理器很常见时。为了实现一个合理的长周期(时间),它汇集了三个不同的线性同余生成器(LCG)的结果,每个LCG的周期长度15。合并结果的组合循环长度为
每个 LCG 都有自己的整数状态,因此需要三个单独的种子值。
【讨论】:
random 模块,而新的rand 模块使用xoroshiro116+ and xorshift1024*。也许这 3 个种子只是作为旧模块的遗留物保留下来的?