我试图用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()正常运行,并且似乎会产生一致的结果。
最佳答案
Mersenne Twister具有19937位的状态空间,可用于迭代生成的值序列。如果使用32位整数对其进行初始化,则会将其限制为219937个可能的起点中的仅232个,并且您将永远看不到大量的样本轨迹。 init_by_array()
功能允许您为初始状态指定更多位,从而有可能实现MT能够生成的任何采样轨迹。
关于c - Mersenne Twister init_by_array()函数说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57836293/