使用随机类和时间种子(NULL),均匀分布总是给出相同的第一个输出,即使有不同的编译,但是在第一个输出之后的行为就像您期望的伪随机数生成器的行为一样。
这是建筑造成的,还是我用错了?
MWE:
#include <ctime>
#include <iostream>
#include <random>
using namespace std;
default_random_engine gen(time(NULL));
uniform_int_distribution<int> dist(10,200);
int main()
{
for(int i = 0; i < 5; i++)
cout<<dist(gen)<<endl;
return 0;
}在我运行这个程序的前三次中,我得到了以下输出:
57
134
125
136
112在第二次尝试之前,我决定删除uniform_int_distribution和int main()之间的空行,以查看种子是否基于编译时,正如您所看到的,这并不重要。
57
84
163
42
146再跑一次:
57
73
181
160
46所以在我的运行中,我总是先得到57,这当然不是世界末日,如果我想要不同的输出,我可以丢弃第一个输出。但它让人怀疑这是否是故意的(如果是的话,为什么?)或者如果我以某种方式滥用了生成器(如果是的话,如何使用?)
发布于 2014-10-20 22:08:48
您使用的种子可能会引入偏差,如果使用不同的种子产生相同的结果,那么生成器本身就不会被正确地写入。
我建议用不同的种子进行测试,得出一个结论。
https://stackoverflow.com/questions/26475595
复制相似问题