【问题标题】:Explination of Mersenne Twister algorithm [closed]Mersenne Twister 算法的解释[关闭]
【发布时间】:2013-06-11 11:46:13
【问题描述】:

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

【问题讨论】:

    标签: algorithm random statistics probability mersenne-twister


    【解决方案1】:

    实际的解释需要先花几年时间才能获得数学学位,但我可以为您提供来自 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);
    }
    

    【讨论】:

      【解决方案2】:

      Mersenne Twister site 上列出了许多关于 Mersenne Twister 随机数生成器背后的算法的论文。您还可以在 Wikipedia 上找到简要说明。

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2014-04-17
        • 1970-01-01
        • 2020-01-10
        • 2013-10-13
        • 1970-01-01
        相关资源
        最近更新 更多