En general, cuando necesito generar un valor aleatorio dentro de un intervalo cerrado (considerando B como el comienzo y E como el final del intervalo) en C, utilizo uno de los siguientes enfoques:
Enfoque 1:
n = round(B + ( (float)rand() / RAND_MAX ) * (E - B));Enfoque 2:
n = B + rand()%(E - B+1);Ambos consideran la inicialización de la semilla aleatoria con la función time():
srand(time(NULL));En los sistemas Linux, ambos enfoques parecen suficientemente buenos para generar valores aleatorios interesantes. Sin embargo, en los sistemas Windows, a veces los números no parecen ser lo suficientemente aleatorios.
Al investigar estos sistemas, descubrí que el valor de RAND_MAX es diferente. En los sistemas Linux que he probado RAND_MAX es 2147483647. En estos sistemas windows con un comportamiento no tan bueno, RAND_MAX es 32767.
Creo que con un valor RAND_MAX mayor podemos generar mejores números aleatorios. Pero no estoy seguro.
Con esto en mente, mi pregunta es: ¿Existe alguna buena forma de generar números aleatorios interesantes (dentro de un intervalo cerrado) que funcionen bien en todos los sistemas?
Además de eso, mis enfoques 1 y 2 son buenos enfoques para generar números aleatorios dentro de un intervalo cerrado.