Entiendo que el tiempo (0) se usa comúnmente para sembrar generadores de números aleatorios y que solo se convierte en un problema cuando el programa se ejecuta más de una vez por segundo. Me pregunto cuáles son algunas semillas mejores para considerar al generar números aleatorios. Leí acerca de GetTickCount, timeGetTime y QueryPerformanceCounter en Windows. ¿Serán suficientes para casi todas las operaciones o hay incluso mejores opciones de siembra?¿Mejores semillas que el tiempo (0)?
Aquí es un ejemplo de código rápida utilizando la biblioteca de impulso:
#include <iostream>
#include <boost/random.hpp>
using namespace std;
using namespace boost;
int main()
{
mt19937 randGen(42);
uniform_int<> range(0,100);
variate_generator<mt19937&, uniform_int<> > GetRand(randGen, range);
for (int i = 0; i < 30; ++i)
cout << GetRand() << endl;
}
Realmente depende de lo que los números aleatorios son para. Usted dice que el tiempo (0) "solo se convierte en un problema cuando el programa se ejecuta más de una vez por segundo", lo que sugiere que los requisitos en sus números aleatorios son muy bajos. Todos respondieron asumiendo los requisitos de seguridad. Si todo lo que necesita es una semilla única para cada ejecución de su programa, concatene la hora y el PID. –
Sí, obviamente los grandes programas, especialmente los juegos en línea que están haciendo la generación aleatoria de números para potencialmente decenas de miles de jugadores por segundo, necesitarían algo mucho más sólido. Sin embargo, para mis simples propósitos en este punto más lento que una vez por segundo está bien. Solo tenía curiosidad. – trikker