Durante 6 años he tenido una página generadora de números aleatorios en mi sitio web. Durante mucho tiempo, fue el primer o segundo resultado en Google para "generador de números aleatorios" y se ha utilizado para decidir decenas, si no cientos de concursos y dibujos en foros de discusión y blogs (lo sé porque veo las referencias en mi registros web y, por lo general, ve a echar un vistazo).
Hoy, alguien me envió un correo electrónico para decirme que puede que no sea tan aleatorio como pensaba. Intentó generar números aleatorios muy grandes (por ejemplo, entre 1 y 10000000000000000000) y descubrió que casi siempre tenían el mismo número de dígitos. De hecho, envolví la función en un bucle para poder generar miles de números y, efectivamente, para números muy grandes, la variación fue de solo 2 órdenes de magnitud.
¿Por qué?
Aquí está la versión en bucle, para que pueda probarla usted mismo:
http://andrew.hedges.name/experiments/random/randomness.html
Incluye tanto una implementación sencilla tomada de Mozilla Developer Network como un código de 1997 que borré de una página web que ya no existe ("Central Randomizer 1.3" de Paul Houle). Ver fuente para ver cómo funciona cada método.
He leído aquí y en otros lugares sobre Mersenne Twister. Lo que me interesa es por qué no habría una mayor variación en los resultados de la función Math.random incorporada de JavaScript . ¡Gracias!