rango - ¿La secuencia de números aleatorios generados por rand, en C, garantiza que siempre será la misma, para la misma semilla?
libreria random c++ (3)
De acuerdo con https://stackoverflow.com/a/15500754/1994390 la respuesta es no. No hay garantía en diferentes implementaciones.
Esta pregunta ya tiene una respuesta aquí:
Me preguntaba si la función rand
( http://www.cplusplus.com/reference/cstdlib/rand/ ) generará la misma secuencia de números aleatorios, mientras usa la misma semilla , cuando se ejecuta en diferentes implementaciones de libc
, e incluso diferentes compiladores y sistemas operativos (win, linux).
Hice algunas pruebas utilizando varios compiladores (g ++ 4.8, g ++ 5.1 y clang) y parece que la respuesta es sí, sin embargo, no encontré ninguna mención "oficial" del algoritmo PRNG utilizado en la generación de números aleatorios de la C ( http://pubs.opengroup.org/onlinepubs/009604599/functions/rand.html ), o si estos deben mencionarse en los estándares ...
Ni siquiera se especifica que RAND_MAX
tenga un valor determinado en implementaciones C, salvo que debe ser> = 32767. Entonces, rand()
en una implementación puede devolver un rango diferente de valores que en otro y, por lo tanto, una secuencia diferente.
La función
rand
calcula una secuencia de enteros pseudoaleatorios en el rango de 0 aRAND_MAX
. C11dr §7.22.2.1 2El valor de la macro
RAND_MAX
será como mínimo de 32767. C11dr §7.22.2.1 5
RAND_MAX
que se expande a una expresión constante entera que es el valor máximo devuelto por la función rand §7.22 3
Incluso con el mismo RAND_MAX
, tenga en cuenta la respuesta de @Servé Laurijssen : la secuencia de valores de rand()
puede diferir.
Nota: por implicación, RAND_MAX <= INT_MAX
.
No hay garantía en el estándar sobre lo que se generará:
Del estándar:
No hay garantías en cuanto a la calidad de la secuencia aleatoria producida y se sabe que algunas implementaciones producen secuencias con bits de orden inferior angustiosamente no aleatorios. Las aplicaciones con requisitos particulares deben usar un generador que se sabe que es suficiente para sus necesidades.