Como se ha señalado en otras respuestas, esto es imposible; en concreto, se parte de una distribución discreta, en la que cada resultado tiene una probabilidad de $2^{-32}$ . Ahora, si tomas alguna función $f$ tomando tales resultados aleatorios y dando como salida un número entero en el rango deseado, entonces está claro que la probabilidad de recibir algún $n$ ya que la salida es igual a $2^{-32}$ veces el número de resultados $x$ tal que $f(x)=n$ - en particular, la probabilidad es siempre múltiplo de $2^{-32}$ . Por desgracia, cifras como $\frac{1}3$ no son múltiplos de $2^{-32}$ por lo que no podemos obtener una distribución uniforme en tres números (seamos nosotros puede obtener una distribución uniforme en $2^n$ resultados para $n\leq 32$ simplemente truncando el número).
Sin embargo, he aquí un procedimiento estándar y sencillo para generar un número entero aleatorio en $[1,N]$ dada la capacidad de generar una aleatoria en $[1,M]$ para $M\geq N$ . Su problema es fácilmente bajo esta clase.
Supongamos que $M=aN + b$ donde $a$ es un número entero y $b$ es positivo y menor que $N$ - es decir, $b$ es el resto de $M$ dividido por $N$ y $a$ es la parte entera del cociente. Generar un entero $x$ en $[1,M]$ . Si es inferior o igual a $aN$ devuelve el resto de $x_0$ dividido por $N$ . En caso contrario, genera otro entero en $[1,M]$ y comprobar si es inferior a $aN$ . Repetir indefinidamente.
Es decir, para generar un número aleatorio, se descartan ciertos resultados y se vuelve a intentar. Por ejemplo, si quisiéramos generar un número entero aleatorio en $[1,2]$ la capacidad de hacerlo en $[1,3]$ simplemente seguimos encontrando números aleatorios en $[1,3]$ hasta que uno de ellos $1$ o $2$ . Se trata claramente de una distribución uniforme. En el lo peor el método anterior arroja unos $\frac{1}2$ de los resultados generados. Sin embargo, si está generando números en $[1,2^{32}]$ y buscando un número aleatorio entre $1$ y un millón, aceptará casi todos los números aleatorios que obtenga (por ejemplo, alrededor del 99,97%), por lo que no hay una gran pérdida de eficiencia.
0 votos
Hola, espero que no te importe que haya mejorado ligeramente tu post. Suponiendo que seas la misma persona que me hizo esta pregunta por correo electrónico, estoy seguro de que aquí obtendrás respuestas excelentes, mejores que cualquiera que se me hubiera ocurrido a mí.
0 votos
@ZevChonoles Hola. Gracias por la edición. Sólo después de mi e-mail pensé en el hecho de que en privado la comunidad no se benefició de su respuesta. Así que preferí preguntar aquí para compartir la respuesta con los demás. Gracias por tu ayuda.