我试图用C11方法来随机数生成:
#include
#include
#include
int main(int argc, char *argv[])
{
std::normal_distribution normal(0, 1);
std::mt19937 engine; // Mersenne twister MT19937
auto generator = std::bind(normal, engine);
int size = 2;
engine.seed(0);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;
std::cout << std::endl;
engine.seed(1);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;
std::cout << std::endl;
engine.seed(0);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;
return 0;
}
输出为:
0.13453
-0.146382
0.46065
-1.87138
0.163712
-0.214253
这意味着即使以相同的数字种子,第一和第三序列也不相同.请,我做错了什么?是个
std::normal_distribution
只是数学意义上的一个功能(x确定性地产生y)或者我是否缺少某些东西?如果它只是一个功能,那么重置方法实际上是做什么的?