gpt4 book ai didi

c++ - C++11 提供了哪个 Mersenne Twister?

转载 作者:可可西里 更新时间:2023-11-01 16:11:14 27 4
gpt4 key购买 nike

我无法确定 Mersenne Twister C++11 提供的变体。在 Mersenne twister: A 623 Dimensionally Equidistributed Uniform Pseudorandom Number Generator 查看 Matsumoto 和 Nishimura ACM 论文,作者提供了算法,算法的实现,并称之为MT19937

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

C++11 提供了哪些 Mersenne Twister?


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

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

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

关于c++ - C++11 提供了哪个 Mersenne Twister?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com