c - Mersenne Twister init_by_array() 函数说明

标签 c function random mersenne-twister

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

相关文章:

c - Arduino 中的空字符数组

c - 为什么为了使用 fgets 读取多行文本,我们需要设置 fgets()!=NULL?

javascript - 关于javascript中的函数

sql - 使用选择查询加入 postgres 中的系列

c - 没有这样的设备或地址(错误代码6)是什么意思

c - C 中具有负索引的二维数组

azure - 连接似乎不适用于 azure

c++ - 根据返回值重载一个C++函数

r - 如何在向量的元素之间随机分配数字?在 R

Matlab 投币模拟