Por 6 anos, tive uma página de gerador de números aleatórios em meu site. Por muito tempo, foi o primeiro ou o segundo resultado no Google para "gerador de números aleatórios" e tem sido usado para decidir dezenas, senão centenas de concursos e desenhos em fóruns de discussão e blogs (eu sei porque vejo os referenciadores em meu web logs e geralmente dá uma olhada).
Hoje, alguém me enviou um e-mail dizendo que pode não ser tão aleatório quanto eu pensava. Ela tentou gerar números aleatórios muito grandes (por exemplo, entre 1 e 10000000000000000000) e descobriu que eles eram quase sempre o mesmo número de dígitos. Na verdade, envolvi a função em um loop para que pudesse gerar milhares de números e, com certeza, para números muito grandes, a variação era de apenas 2 ordens de magnitude.
Por quê?
Aqui está a versão em loop, para que você possa experimentá-la:
http://andrew.hedges.name/experiments/random/randomness.html
Inclui uma implementação direta tirada da Mozilla Developer Network e algum código de 1997 que eu peguei de uma página da web que não existe mais ("Central Randomizer 1.3" de Paul Houle). Veja a fonte para ver como cada método funciona.
Eu li aqui e em outros lugares sobre Mersenne Twister. Estou interessado em saber por que não haveria maior variação nos resultados da função Math.random integrada do JavaScript . Obrigado!