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