我需要在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。
我该如何解决这个问题?为什么会这样?
答案 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,所以你不会变得更糟。它不是最佳计划,但它应该让你开始。