randomize rand number generate dev c++ random srand

c++ - number - srand php



¿Es malo srand(time(NULL))? (1)

Como veo que srand (time (NULL)) es tan frecuente (incluso en este sitio), ¿debería desalentarse?

Depende de cómo quiera usar la salida de su generador (en este caso, la salida de rand() ).

Si solo necesita una distribución uniforme para las ejecuciones individuales de su programa, entonces srand(time(NULL)) está bien. Esto sería aceptable en una simulación donde solo necesita una distribución uniforme de números rápidamente.

Si desea enviar un trabajo por lotes para que varias instancias de su programa se ejecuten al mismo tiempo (y se inicien efectivamente al mismo tiempo), entonces srand(time(NULL)) probablemente dará como resultado que una o más instancias produzcan lo mismo Secuencia aleatoria.

Si necesita una salida segura, entonces no debe usar srand(time(NULL)) porque a menudo es un generador lineal congruente (LCG). Joan Boyar nos enseñó a romperlos hace años. Consulte Inferir secuencias producidas por un generador lineal congruente que faltan bits de orden inferior .

En cuanto al problema con time_t , solo dóblalo para que se ajuste al argumento esperado por srand si time_t es demasiado grande. Incluso puede plegar el PID de proceso para que los trabajos de simulación por lotes funcionen según lo previsto / esperado.

En rand () considerado dañino , se señala que srand(time(NULL)) es malo porque srand toma un unsigned int , pero para el compilador de Microsoft, time_t por defecto es un número de 64 bits, por lo tanto, ocurre una conversión de reducción. Sin embargo, time_t está definido por la implementación.

Como veo que srand(time(NULL)) tan frecuente (incluso en este sitio), ¿debería desalentarse?