Por @Alvy — 24 de Octubre de 2017

Clock numbers

Los ordenadores necesitan números aleatorios para realizar todo tipo de tareas: simulaciones, juegos, criptografía, arte… Pero la forma de generarlos es puramente matemática, lo cual es un problema más que una ventaja: al cabo de un tiempo lo que parece aleatorio no es tan aleatorio. Se puede utilizar una combinación con procesos físicos más o menos aleatorios (desde los movimientos del ratón sobre la mesa a la radioactividad), pero en base a matemáticas puras lo mejor que se puede ofrecer son números pseudoaleatorios. Son algo bastante cercano al puro azar pero en cierto modo también limitados en cuanto a su aleatoriedad.

En cualquier caso, generar una buena secuencia de números pseudoaleatorios matemáticamente tampoco es fácil. Venkatraman Srikanth explica en un artículo muy divulgativo las matemáticas que hay tras esa generación de secuencias de números pseudoaleatorios, algo que denomina caos predecible. Básicamente se trata de encontrar una función cuyos resultados varíen cada vez que se utilice, aunque se sepa que se repetirá porque técnicamente sólo se puede utilizar una cantidad de números limitada (por ejemplo los números de la esfera de un reloj o los 264 bits de un número almacenado en una variable).

El número que se utiliza como entrada de la función se llama semilla y el proceso es básicamente repetitivo. Si la función es buena el resultado producirá un valor que al usar de nuevo como semilla dará otro distinto, luego otro y así sucesivamente hasta que se hayan cubierto tantos como sea posible (no necesariamente todos). Es lo que se conoce como Generador lineal congruencial y cuanto más grande sea su periodo y la distribución de los bits que se eligen como resultado, mejor.

Quien necesite algo mejor, ya sabe: a combinar las fórmulas matemáticas con otros fenómenos físicos como la radioactividad, el ruido electrónico o los fenómenos cuánticos cuya aleatoriedad se considera tan perfecta como es posible definirla.

Relacionado:

Compartir en Flipboard Publicar / Tuitear