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++?
Respuesta
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 para mencionar hilos. – juanchopanza
Boost :: random es más portable que drand48_r, o usa el C++ 0x al azar (que es un derivado de Boost) – MSalters
@MSalters: Por supuesto, iría por las nuevas características '
llaman una vez cuando se inicia la aplicación
Sólo una vez, al comienzo de su aplicación.
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.
- 1. ¿Con qué frecuencia debo usar try and catch in C#?
- 2. ¿Con qué frecuencia debo guardar en Core Data?
- 3. srand función en C++
- 4. ¿Cuándo debo llamar a mainloop en una aplicación Tkinter?
- 5. ¿Con qué frecuencia debo abrir/cerrar mi conexión de Booksleeve?
- 6. ¿Debo llamar a ReleaseIntArrayElements en una matriz creada con NewIntArray?
- 7. ¿Debo llamar a Graphics.Dispose()?
- 8. ¿Con qué frecuencia debo cerrar las conexiones a la base de datos?
- 9. ¿Cuándo debo llamar a setNeedsDisplay en iOS?
- 10. ¿Con qué frecuencia se llama a viewDidLoad?
- 11. Cómo llamar a un archivo VBScript en una aplicación C#?
- 12. Llamar a una aplicación desde otra aplicación
- 13. ¿Qué aplicación debo usar con netsh.exe?
- 14. ¿Debo llamar a Dispose() en objetos administrados?
- 15. Cómo generar una buena semilla aleatoria para pasar a srand()?
- 16. ¿Debo llamar a MessageDigest.reset() antes de usarlo?
- 17. ¿Debo llamar a DestroyIcon si lo hice con LoadIconWithScaleDown?
- 18. Indexación en mongoid: cuándo y con qué frecuencia debo ejecutar rake db: mongoid: create_indexes?
- 19. ¿debo llamar a close() después de urllib.urlopen()?
- 20. Mi aplicación con frecuencia lanza excepción android.view.WindowLeaked -
- 21. GLSurfaceView: ¿Debo llamar a OnPause/onResume?
- 22. Versiones de la aplicación para iPhone: ¿libera microactualizaciones con frecuencia o actualizaciones importantes con menos frecuencia?
- 23. Cuándo debo llamar a close() en SQLiteOpenHelper utilizado por ContentProvider
- 24. diferencia entre ejecutar curl_close() una vez o con frecuencia?
- 25. ¿Cómo debo comenzar a codificar una aplicación web de Skype?
- 26. Problema con llamar a una función PowerShell desde C#
- 27. ¿Se necesita llamar a la función C de srand() por subproceso o por proceso para inicializar el aleatorizador?
- 28. ¿Con qué frecuencia se lanza xhr.upload.onProgress?
- 29. ¿Cómo debo llamar a Perl Script en Java?
- 30. Llamar a una función MATLAB desde C#
'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