2011-08-05 9 views
10

Tengo una aplicación C++ que llama a rand() en varios lugares. ¿Tengo que inicializar srand() regularmente para asegurarme de que rand() es razonablemente aleatorio, o es suficiente llamarlo una vez cuando se inicia la aplicación?¿Con qué frecuencia debo llamar a srand() en una aplicación de C++?

+2

'srand' no hace' rand' "más" aleatorio. No garantiza una "aleatoriedad razonable" de ninguna manera. Simplemente hace que la secuencia de números aleatorios comience desde el punto especificado. – jalf

Respuesta

15

Si tiene solo un hilo, sembrar una vez. Si resiembraste frecuentemente, podrías romper algunas de las propiedades estadísticas de los números aleatorios. Si tiene varios hilos, no use rand, sino algo inseguro como drand48_r, que le permite mantener un estado por hilo (para que pueda sembrar una vez por hilo).

+1

+1 para mencionar hilos. – juanchopanza

+1

Boost :: random es más portable que drand48_r, o usa el C++ 0x al azar (que es un derivado de Boost) – MSalters

+2

@MSalters: Por supuesto, iría por las nuevas características '' cualquier día. Están un poco más involucrados en la configuración, así que pensé que respondía en el espíritu de la pregunta, pero de hecho, ¡use '' si puede! –

3

llaman una vez cuando se inicia la aplicación

4

Sólo una vez, al comienzo de su aplicación.

4

No solo llamar una vez está bien. Utilice el valor inicial para hacer que la secuencia aleatoria sea la misma en cada ejecución. Esto podría ser útil para hacer que (por ejemplo) el comportamiento de un juego sea determinista cuando lo reproduzca para la depuración.

Cuestiones relacionadas