首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >伪随机数生成器提供相同的第一个输出,但随后的行为与预期相同。

伪随机数生成器提供相同的第一个输出,但随后的行为与预期相同。
EN

Stack Overflow用户
提问于 2014-10-20 21:57:11
回答 3查看 4.1K关注 0票数 11

使用随机类和时间种子(NULL),均匀分布总是给出相同的第一个输出,即使有不同的编译,但是在第一个输出之后的行为就像您期望的伪随机数生成器的行为一样。

这是建筑造成的,还是我用错了?

MWE:

代码语言:javascript
复制
#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;
}

在我运行这个程序的前三次中,我得到了以下输出:

代码语言:javascript
复制
57
134
125
136
112

在第二次尝试之前,我决定删除uniform_int_distributionint main()之间的空行,以查看种子是否基于编译时,正如您所看到的,这并不重要。

代码语言:javascript
复制
57
84
163
42
146

再跑一次:

代码语言:javascript
复制
57
73
181
160
46

所以在我的运行中,我总是先得到57,这当然不是世界末日,如果我想要不同的输出,我可以丢弃第一个输出。但它让人怀疑这是否是故意的(如果是的话,为什么?)或者如果我以某种方式滥用了生成器(如果是的话,如何使用?)

EN

Stack Overflow用户

发布于 2014-10-20 22:08:48

您使用的种子可能会引入偏差,如果使用不同的种子产生相同的结果,那么生成器本身就不会被正确地写入。

我建议用不同的种子进行测试,得出一个结论。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26475595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档