【问题标题】:Why does Erlang's random number generation seeding require 3 integers?为什么 Erlang 的随机数生成种子需要 3 个整数?
【发布时间】:2018-05-23 13:53:06
【问题描述】:

Erlang 的 rand:seed/2 使用 3 个整数作为 RNG 的种子。

而 RNG 实现通常需要 1 个整数作为种子,为什么 Erlang 专门使用 3?

【问题讨论】:

    标签: random erlang


    【解决方案1】:

    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 个种子只是作为旧模块的遗留物保留下来的?
    • 很高兴听到它已经切换,与现代 PRNG 相比,Wichmann-Hill 并没有那么好。我自己不是 Erlang 程序员,我选择了链接文档显示的内容。他们坚持使用 3 个种子以实现向后兼容性听起来似乎是合理的。
    猜你喜欢
    • 2021-05-15
    • 2011-02-08
    • 2021-12-10
    • 2014-05-19
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多