Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Números aleatorios
1. Números aleatorios y
generadores
Introducción
Los números aleatorios tienen importantes aplicaciones en programación, entre las que
se incluye la criptografía, la simulación y la comprobación de programas.
En muchas ocasiones, en computación se requiere el uso de números aleatorios, sobre
todo en los sistemas de simulación. Sin embargo, no es tan fácil implementar buenos
generadores de números aleatorios.
Así, verificamos que lo que se imprime por pantalla (consola) es una lista de 10 números
todos iguales (unos o ceros). Tampoco nos sirve si tomamos los milisegundos en vez de
los segundos, ya que el programa está haciendo más cosas entre las llamadas al
generador, la secuencia de números generada no sería aleatoria, ya que el tiempo
transcurrido entre las llamadas al generador sería prácticamente idéntico en cada
invocación del programa, con lo que los resultados que se producirían al realizar distintas
ejecuciones serían demasiado parecidos.
Para crear una secuencia de números aleatorios, tenemos que seguir los siguientes
pasos:
Figura 3
Constructores
Aunque no podemos predecir qué números se generarán con una semilla particular,
podemos, sin embargo, duplicar una serie de números aleatorios usando la misma
semilla, es decir, cada vez que creamos un objeto de la clase Random con la misma
semilla, obtendremos la misma secuencia de números aleatorios. Esto no es útil en el
caso de loterías, pero puede serlo en el caso de juegos, exámenes basados en una
secuencia de preguntas aleatorias, las mismas para cada uno de los estudiantes,
simulaciones que se repitan de la misma forma una y otra vez, entre otros.
Funciones miembro
Figura 8
Genera un número aleatorio de tipo float entre 0.0 y 1.0, aunque siempre menor que
1.0:
Figura 10
Genera un número aleatorio de tipo Double entre 0.0 y 1.0, aunque siempre menor que
1.0:
Casi siempre usaremos esta última versión. Por ejemplo, para generar una secuencia de
10 números aleatorios entre 0.0 y 1.0, escribimos:
Figura 11
(int) transforma un número decimal Double en entero int eliminando la parte decimal.
Comprobación de la uniformidad de los números aleatorios
Creamos una secuencia de 100 000 números aleatorios enteros comprendidos entre 0 y
9, ambos inclusive (véase el apartado anterior):
Figura 15
Si n sale cero, se suma una unidad al contador de ceros, ndigitos[0]. Si n sale uno, se
suma una unidad al contador de unos, ndigitos[1], y así sucesivamente.
Finalmente, se imprime el resultado: los números que guardan cada uno de los
elementos del array ndigitos.
Figura 16
Comprobaremos que los números que aparecen en las dos secuencias son distintos.
Fuente: http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/azar.htm
Referencias
Weiss, M. A. (2000). Estructuras de Datos en Java. Buenos Aires, AR: Adisson Weisley.