C ++ 11提供哪些Mersenne Twister?

w

我在确定Mersenne Twister C ++ 11提供的变体时遇到麻烦。Mersenne twister上的Matsumoto和Nishimura的ACM论文中:作者:623维均匀分布的伪随机数生成器,作者提供了该算法,该算法的实现,并将其称为MT19937

但是,当我使用下面的小程序测试C ++ 11的同名生成器时,我无法再现由Matsumoto和Nishimura的MT19937创建的流。流与产生的第一个32位字不同。

C ++ 11提供哪些Mersenne Twister?


下面的程序使用GCC-std=c++11和GNU在Fedora 22上运行stdlibc++

std::mt19937 prng(102013);
for (unsigned int i = 0; i <= 625; i++)
{
    cout << std::hex << prng();

    if(i+1 != 625)
        cout << ",";

    if(i && i%8 == 0)
        cout << endl;
}
内森·奥利弗

从纸张链接和标准定义的MT19937来看MT19937看起来是一样的,但是又增加了一层回火和初始化倍增器

如果我们看一下[rand.predef] 26.5.5(3)定义的值与本文定义的参数,

32,624,397,31,0x9908b0df,11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253 <- standard
w ,n  ,m  ,r ,a         ,u ,d         ,s,b         ,t ,c         ,l ,f  
32,624,397,31,0x9908b0df,11,          ,7,0x9d2c5680,15,0xefc60000,18,           <- paper

这就是差异的来源。同样根据标准,第10,000次迭代std::mt19937399268537

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++ 14中引入的哪些更改可能会破坏用C ++ 11编写的程序?

哪些Boost功能与C ++ 11重叠?

C ++ 11中弃用了哪些C ++习惯用法?

从Mersenne Twister获得的数字中只取几位是否安全?

各个编译器的Mersenne Twister重现性

哪些有效的C ++项目可以通过C ++ 11更好地实现?怎么样?

Eigen C ++库提供C ++ 11选项错误

给mersenne_twister的呼叫比想象的要多

C ++ 11 Mersenne Twister每次产生相同的值

通过构造函数错误地将Mersenne Twister播种

C ++ 98和C ++ 11之间的哪些变化显示了行为上的差异?

实现64位Mersenne Twister-定义

使用浮点精度时,C ++ random对相同的Mersenne Twister种子产生不同的数字

对c ++ 11原子变量的哪些操作实际上是原子的?

std :: mersenne_twister_engine和随机数生成

如何使用Boost序列化mersenne_twister_engine?

pip install Twister抛出很长的错误

如何在C语言中使用Mersenne Twister随机数生成库?

我可以从Mersenne Twister获得当前种子吗?

Mersenne Twister随机生成器-两个并行运行的VS2010

操作系统提供哪些服务来执行C程序

USB Type-C备用模式需要提供哪些硬件支持?

Python Twister Reactor callLater时间源?

迭代MapReduce(Twister)运行异常

在多节点集群上配置Twister

Mersenne Twister(mt19937ar.c)未返回随机数

C ++ 11在缺少时提供空的非成员函数

在不同的浮点精度之间切换时,为 std::mersenne_twister_engine 使用我自己的模板参数

Mersenne Twister init_by_array() 函数说明