Mersenne Twister init_by_array() 函数说明

Mersenne Twister init_by_array() function clarification

我正在尝试使用 32 位种子实现跨平台一致的随机数生成。 大多数 post 指向我 Mersenne Twister 或编写我自己的实现。

source code 中有一个名为 void init_by_array() 的函数。

这个函数的唯一目的是扩展通过 32 位的种子吗?

来自ReadMe

init_by_array(init_key, key_length) initializes the state vector by using an array init_key[] of unsigned 32-bit integers of length key_kength. If key_length is smaller than 624, then each array of 32-bit integers gives distinct initial state vector. This is useful if you want a larger seed space than 32-bit word.

只是根据最后一句话假设无法理解。

代码似乎 运行 仅使用 init_genrand() 就可以了,而且似乎产生了一致的结果。

Mersenne Twister 有 19937 位状态 space,它用于迭代它产生的值序列。如果你用一个 32 位整数初始化它,你就把它限制在 219937 个可能的起点中的 232 个,并且有您永远看不到的大量样本轨迹。 init_by_array() 函数允许您为初始状态指定更多位,从而有可能实现 MT 能够生成的任何采样轨迹。