【发布时间】:2020-01-10 04:11:42
【问题描述】:
我尝试使用 32 位种子实现跨平台一致的随机数生成。 大多数帖子将我指向Mersenne Twister 或编写我自己的实现。
在source code中有一个函数叫做void init_by_array()。
这个函数的唯一目的是扩展32位传递的种子吗?
来自ReadMe
init_by_array(init_key, key_length) 初始化状态向量 通过使用无符号 32 位整数的数组 init_key[] 长度key_kength。如果 key_length 小于 624, 然后每个 32 位整数数组给出不同的初始值 状态向量。如果您想要更大的种子空间,这很有用 大于 32 位字。
仅根据最后一句假设无法理解。
代码似乎只使用 init_genrand() 运行良好,并且似乎产生了一致的结果。
【问题讨论】:
-
这个:pcg-random.org/posts/cpp-seeding-surprises.html可能与您的担忧有关。
-
@Bob__ 有趣的阅读。可预测性部分特别感兴趣。
-
@DevilBinder MT 的可预测性是众所周知的,甚至在原始 MT 论文中也有描述:它是设计的一部分。
标签: c function random mersenne-twister