<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>
<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>
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.