jueves, 14 de marzo de 2013

La función RND

La función RND genera números estadisticamente dispersos (con poca correlación entre si) a los que llamamos aleatorios (random).

Los números aleatorios generados por ordenador utilizando las funciones habituales de los distintos lenguajes de programación, son en realidad pseudo-aleatorios.

El debate sobre la pseudo-aleatoriedad nos es nada trivial ya que el uso de funciones pseudo aleatorias puede dar lugar a problemas de seguridad serios o bien a simulaciones poco rigurosas, que tienden a repetir el mismo resultado una y otra vez, por ejemplo cuando se usa el método de Monte Carlo para calcular el valor de Pí. 

Por otra parte esta el debate filosófico de si realmente existen los fenómenos aleatorios, aunque siempre queda la opción de usar un generador cuántico de números aleatorios.

Siendo rigurosos.... volvamos a 1968, 1979 y 1984 para hacer algunas comprobaciones:


En la página 43 del Manual de BASIC explica que cada "run" de números aleatorios produce el mismo resultado, aceptando de forma explicita que no existe la aleatoriedad entre cada run.


El programa del Manual de Darmouth Basic escrito y ejecutado en un MSX confirma lo que se dice en la página 43 del Manual ya que los resultados de diferentes "run" del programa arrojan exactamente los mismos resultados. ¿pero esto es realmente así?.....


el mismo programa ejecutado en Commodore PET 2001 de 1979... sorpresa!!! en este caso cada "run" produce números aleatorios distintos en cada caso.

Si alguien tiene una buena explicación a este asunto, me agradaría escucharla.

2 comentarios:

  1. En el BASIC de MSX se pueden conseguir números aleatorios reales si se usa el parámetro TIME.
    Ejemplo:
    10 Z=INT(RND(-TIME)*100)+1
    20 PRINT Z
    En este caso, Z será un número aleatorio entre 1 y 100 cada vez que se ejecute el programa.
    Supongo que el PET debe usar TIME internamente para generar una semilla aleatoria distinta cada vez...

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario. Tienes razón, he probado tu sugerencia y con la función TIME no se repiten los bloques de números aleatorios.

      En cuanto al PET 2001, he mirado bien el manual y hay una función TI$ que da la hora interna del sistema pero no se si la función RND la toma como seed.

      Gracias una vez mas.

      Eliminar