重复的随机发生器的初始序列

时间:2018-02-15 08:29:46

标签: c++

我需要在0:23范围内生成伪随机数。我正在尝试这个:

#include <iostream>
#include <cstdlib>
#include <random>
#include <ctime>


std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(0,23);

unsigned int random;

random = distribution(generator);

我的问题是:每次运行我的程序时,前三个随机数是0,3,18。

我该如何解决这个问题?为什么会这样?

1 个答案:

答案 0 :(得分:2)

记住P代表&#34;伪&#34;!

PRNG从种子开始生成伪随机数序列。由于您自己没有提供,std::default_random_engine在默认构建时使用相同的种子。所以你每次都得到相同的序列。

种下它的一种可能且简单的方法是使用std::random_device作为小熵的来源:

std::random_device r;
std::default_random_engine generator(r());

如果可能,r将产生不确定的数字。否则,它也将是PRNG,所以你不会变得更糟。它不是最佳计划,但它应该让你开始。