O gerador de números pseudo-aleatórios fornece a mesma primeira saída, mas se comporta conforme o esperado
Usando a classe aleatória e uma semente do tempo (NULL), a distribuição uniforme sempre fornece a mesma primeira saída, mesmo com compilações diferentes, mas após a primeira saída se comportar como seria de esperar que um gerador de números pseudoaleatórios se comportasse.
É por construção ou estou usando incorretamente?
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;
}
Nas três primeiras vezes que executei este programa, obtive resultados de:
57
134
125
136
112
Antes da segunda tentativa, decidi excluir a linha vazia entreuniform_int_distribution
eint main()
apenas para ver se a semente foi baseada no tempo de compilação, como você pode ver, isso não importava.
57
84
163
42
146
Apenas executando novamente:
57
73
181
160
46
Então, nas minhas corridas eu continuo recebendo57
primeiro, o que obviamente não é o fim do mundo, se eu quiser resultados diferentes, posso jogar fora o primeiro resultado. Mas coloca em questão se isso é intencional (se sim, por quê?) Ou se estou usando mal o gerador de alguma forma (se sim, como?).