我试图用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/

10-11 06:29
查看更多