Mersenne Twister算法的解释

时间:2013-06-14 18:29:11

标签: algorithm random statistics probability mersenne-twister

我希望在一个项目中实现Mersenne Twister随机数生成器。但是,由于这是针对嵌入式应用程序的,我稍后将优化我的架构代码。但是,我可以找到关于代码如何工作的小文档,我几乎可以肯定它不是小精灵的尘埃和魔法。那里有什么好的文件我可能会忽略吗?流程图会很好。如果没有,如果有人能给我一步一步解释算法,我将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

实际的解释需要先花几年时间才能获得数学学位,但我可以从ojrandlib给你我的主要州预先代码版本,这比你发现的大部分内容都简单网络上。我的结构g保存生成器状态:g->state是MT状态向量本身,g->buf是返回的随机位的输出缓冲区:

int i, j, k, n = g->statesize;
uint32_t y, m, *s = g->state, *bp = g->buf + g->bufsize;

for (i = 0; i < n; ++i) {
    j = i + 1;      if (j >= n) j -= n;
    k = i + 397;    if (k >= n) k -= n;

    m = (s[j] & 1) ? 0x9908b0df : 0;
    s[i] = m ^ s[k] ^ (((s[i] & 0x80000000) | (s[j] & 0x7FFFFFFF)) >> 1);
}
for (i = 0; i < n; ++i) {
    y = s[i] ^ (s[i] >> 11);
    y ^= (y << 7) & 0x9d2c5680U;
    y ^= (y << 15) & 0xefc60000U;
    *--bp = y ^ (y >> 18);
}

答案 1 :(得分:0)

关于Mersenne Twister site上列出的Mersenne Twister随机数生成器背后的算法,有很多论文。您还可以在维基百科上找到精简的解释。