O intervalo Math.random é [0,1)? Na verdade não!

Enquanto eu estava pensando em quão aleatórios são os números gerados por Math.random, observei uma coisa interessante sobre Math.random.

Primeiro tentei gerar 1000 números aleatórios usando um loop. Bem, funcionou bem. 1000 números aleatórios entre 0 e 1 foram gerados quase igualmente distribuídos dentro do intervalo.

Conforme eu aumentava ainda mais o contador de loop, além de 100.000, comecei a observar que Math.random gerava números fora do intervalo de [0,1)

var array= {};
for (var i=0; i<1000000; i++) {
var random = Math.random().toString().substring(0,3);
if(random.substring(0,2) != '0.') {
console
.log(random);
}
if (typeof array[random] != 'undefined') {
array
[random]++;
} else {
array
[random] = 1;
}
}

Tente executar este snippet de código no Firebug ou nas Ferramentas de desenvolvedor do Chrome. Você verá números entre 1.x a 9.x sendo gerados.