Cómo funciona un generador de números aleatorios

Un ordenador es una máquina que sigue instrucciones al pie de la letra. Entonces, ¿cómo puede lanzar una moneda, tirar un dado o elegir un nombre al azar? La respuesta corta: casi nunca genera números realmente aleatorios. Genera números que solo lo parecen, y para la mayoría de los usos eso basta. Aquí verás cómo funciona un generador de números aleatorios, en qué puede fallar y cómo eligen sus resultados las herramientas de esta web.

Dos tipos de azar

  • Los números aleatorios de verdad salen de algo físico que nadie puede predecir: el ruido eléctrico de un circuito, la desintegración radiactiva o la estática de radio de la atmósfera. Random.org, por ejemplo, usa el ruido atmosférico.
  • Los números pseudoaleatorios salen de una fórmula. Se parte de un número llamado semilla, se pasa por la fórmula y se obtiene el siguiente número, y luego el siguiente. El resultado parece aleatorio, pero la misma semilla da siempre la misma secuencia.

Lo pseudoaleatorio suena a trampa, pero es lo que usan casi todos los juegos, aplicaciones y simulaciones. Es rápido, y una buena fórmula supera las mismas pruebas estadísticas que supera el azar de verdad.

El primer método informático y su defecto

Hacia 1949, el matemático John von Neumann propuso el método del cuadrado medio: se eleva un número al cuadrado, se toman las cifras del centro y se repite. Si empiezas con 1234, su cuadrado es 01522756, así que el siguiente número es 5227, y después vienen 3215, 3362, 3030, etc.

Parece aleatorio, pero cae en bucles. Si empiezas con 2916, obtienes 5030, 3009, 0540, 2916, y a partir de ahí los mismos cuatro números para siempre. Von Neumann lo sabía. Usaba el método porque era rápido y revisaba los resultados en busca de problemas. Su famosa broma decía que quien intenta producir números aleatorios con aritmética está «en estado de pecado».

Antes de los ordenadores: libros de números aleatorios

Los científicos necesitaban tanto los números aleatorios que llegaron a imprimirse en libros. En 1955, la RAND Corporation publicó A Million Random Digits with 100,000 Normal Deviates, creado con una ruleta electrónica. Los investigadores abrían una página al azar e iban leyendo cifras. Mucho antes, la gente usaba dados, monedas y sorteos, como cuenta nuestro artículo sobre el oráculo de dados en la Antigüedad.

Cómo funcionan los generadores modernos

Los generadores pseudoaleatorios de hoy son mucho mejores. Entre los más comunes están:

  • Mersenne Twister: el generador por defecto en Python y en muchas otras herramientas. Solo se repite tras 219937 − 1 números, un número de unas 6000 cifras.
  • xorshift128+: el generador que hay detrás de Math.random() en Chrome y en otros navegadores basados en el motor V8. Es muy rápido y va bien para juegos y animaciones.
  • Generadores criptográficos: los que se usan para contraseñas y claves de cifrado. El sistema operativo mezcla sucesos físicos impredecibles, como pequeñas diferencias de tiempo en el hardware, de modo que ni siquiera quien conoce la fórmula puede predecir el siguiente número.

Los generadores corrientes valen para un juego. Pero si alguien ve suficientes resultados suyos, a veces puede deducir el resto. Para todo lo que dependa de la equidad o la seguridad, lo correcto es el tipo criptográfico.

Una trampa oculta: el sesgo del módulo

Incluso un generador perfecto puede dar resultados injustos si se usa sin cuidado. Imagina que tienes un byte aleatorio, un número del 0 al 255, y quieres tirar un dado. Lo fácil es dividir entre 6 y quedarse con el resto. Pero 256 no es divisible entre 6, así que cuatro de las caras reciben una oportunidad de más:

Cara del dado sacada de un byte aleatorio (de 0 a 255) con el resto de dividir entre 6
CaraProbabilidad
1, 2, 3 o 443 de 256 cada una (16,8 %)
5 o 642 de 256 cada una (16,4 %)

La diferencia es pequeña, pero en miles de tiradas se nota. La solución es sencilla: si el número aleatorio cae en la parte sobrante desigual, se descarta y se saca otro. Esto se llama muestreo por rechazo.

Cómo eligen nuestras herramientas

Nuestras herramientas Cara o cruz, Lanzar dados, Número aleatorio, Ruleta de nombres y las demás que comparten el mismo código usan el generador criptográfico de tu navegador, llamado crypto.getRandomValues. Además aplican muestreo por rechazo, así que cada cara, número y nombre tiene exactamente la misma probabilidad. Los navegadores antiguos que no tienen esa función recurren a Math.random(). Todo se ejecuta en tu propio navegador; nada se decide en nuestro servidor.

Entonces, ¿es azar de verdad?

Para lanzar una moneda o tirar un dado, un buen generador es mejor que el objeto real. Las monedas reales tienen un pequeñísimo sesgo hacia la cara con la que empiezan, como explicamos en nuestro artículo sobre la probabilidad de cara o cruz, y los dados reales pueden ser ligeramente irregulares. Un buen generador no tiene ninguno de los dos problemas.

El riesgo mayor está en la persona que lee los resultados. Vemos patrones en las rachas y esperamos que al resultado «que falta» le toque salir. Es la falacia del jugador, y engaña a la gente mucho más a menudo que cualquier ordenador. Para ver lo mal que se nos da inventarnos números al azar, lee «¿Somos capaces de ser aleatorios?».

Preguntas frecuentes

¿Puede un ordenador generar números realmente aleatorios?

No solo con una fórmula. Las fórmulas dan números pseudoaleatorios que solo parecen aleatorios. Para obtener azar de verdad, los ordenadores miden sucesos físicos impredecibles, como el ruido eléctrico, y muchos dispositivos tienen hardware para ello.

¿Qué es la semilla de un generador de números aleatorios?

Es el número de partida de la fórmula. La misma semilla da siempre la misma secuencia, algo útil para hacer pruebas y en los juegos que permiten compartir un mundo o un nivel mediante su semilla.

¿Math.random() es realmente aleatorio?

No. Es un generador pseudoaleatorio rápido, válido para juegos, pero no para nada secreto ni cuando hay dinero en juego. Para eso, los navegadores ofrecen crypto.getRandomValues.

¿Son justas las monedas y los dados en línea?

Si están bien hechos, sí. Nuestras herramientas de cara o cruz y de dados usan el generador criptográfico del navegador con muestreo por rechazo, así que cada resultado tiene exactamente la misma probabilidad.

¿Qué es el sesgo del módulo?

Una pequeña injusticia que aparece cuando se encaja un número aleatorio en un rango más pequeño usando el resto de una división y la división no es exacta. El muestreo por rechazo lo elimina.

También te puede gustar

Prueba nuestras herramientas de sí o no

✈️