Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Un simple generador de números aleatorios

El mundo está lleno de eventos aleatorios. Por ejemplo, en esta ciudad no podemos saber jamás con certeza a qué hora llegará a nuestra estación...

random-numbers00El mundo está lleno de eventos aleatorios. Por ejemplo, en esta ciudad no podemos saber jamás con certeza a qué hora llegará a nuestra estación el Metro, o bien, si habrá lugar en el supermercado para estacionarnos, o si la luz roja del semáforo cambiará en el tiempo esperado (asunto que frecuentemente no ocurre porque algún policía está manipulando el dispositivo). Y por ello, los seres humanos podemos lidiar con esta aleatoriedad que nos es, en muchos sentidos, cotidiana.
En la computadora, los números aleatorios no pueden darse fácilmente, porque no tenemos un proceso que pueda darnos un valor al azar completamente. Hay dispositivos electrónicos que pueden conectarse a un puerto USB, por ejemplo, y entregar números aleatorios totalmente, pero estos no son equipo estándar en las máquinas que usamos (y no sé por qué). Así, estamos obligados a buscar una solución, al menos parcial, a esta dificultad y de hecho, tenemos algunas soluciones interesantes, llamadas genéricamente “números pseudo-aleatorios”.

¿Pero cómo se pueden generar? En realidad no es muy difícil. El siguiente algoritmo (en Pascal/Delphi). describe esta idea:

var
   a  : real;
   x  : real;
begin
  X := 0.1;
  Repeat
    X := 147 * X – Int(147 * X);
    showmessage(Floattostr(X * 10));
    X := X+ 0.1;
  until X > 100;
end;

Si se repite este proceso, obtendremos la secuencia de números al azar. Así pues, podemos simular la secuencia de números de forma aleatoria.

De hecho, prácticamente todos los lenguajes de programación permiten generar números pseudo-aleatorios a través de algoritmos parecidos, usando instrucciones como random o rnd, por ejemplo. Para la mayoría de los usos cotidianos, estas rutinas funcionan muy bien, pero finalmente llega un momento que se repiten las secuencias.

¿Quién conoce algoritmos para generar secuencias aleatorias de números? ¿Quiénes tienen código fuente (en cualquier lenguaje) sobre este tema?

Referencias:

Adventures with your computer; L Rade y R.D. Nelson; Penguin Books 1984

Comentarios