Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Math.random() * 10 gera números abaixo de 1

<script>

    var N = 100000
    var counter = 1

    for (var i = 1; i <= N; i++){
        if (     Math.random() < 0.1     ){
        counter ++
        }
    }

    percent = (counter/N) * 100
    document.write(percent)
</script>
2 respostas
solução!

Boa noite José,

Creio que o problema seja usar a função Math.round(). Ao utilizá-la você estará reducindo a probabilidade do número aleatório entre 0 e 0.1 de 10% para 5%, pois a função round arredondará o número fracionário para o inteiro mais próximo.

Tente o mesmo código sem a função Math.round() . No meu experimento eu obtive um valor próximo a 10% para vários valores de iguais a 1000 e 10000.

    var N = 1000
    var counter = 1

    for (var i = 1; i <= N; i++){
        if ( 10 * Math.random()  < 1){
        counter ++
        }
    }

    percent = (counter/N) * 100
    document.write(percent)

Sim, está correto. Na verdade eu já havia sanado minha dúvida. Porque como a função Math.random() pode gerar um número abaixo de 0,01 achei que daria erro ao multiplicar por 10. Mas o Math.round() vai fazer com que qualquer valor seja arredondado para 0 ou 1. O random pode dar por exemplo 0.08 que multiplicado dá 0.8 mas aí o round passa para 1 ou 0 se for abaixo de 0.5. Mas eu queria mesmo ver como era o comportamento da função Math.round(). Parece que ele gera 10% dos números na ordem de 10^-2 e 1% da ordem de 10^-3 e assim por diante.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software