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

Entendendo intervalos na matemárica

Bom dia, boa tarde ou boa noite. Não importa o momento que você ler isso, mas compreenda o que de fato acontece no uso do Math.random().

Verifique no que diz a documentação do Math.random() no MDN: "O Math.random() método estático retorna um número pseudoaleatório de ponto flutuante, maior ou igual a 0 e menor que 1, com distribuição aproximadamente uniforme nesse intervalo"

Mais o que significa ser: maior ou igual a 0 e menor que 1?

Na matemática a representação para o intervalo: { x ∈ R ∣ 0 ≤ x < 1 } ou [0, 1), sendo bem representado na teoria dos conjuntos de forma a ser compreendido visualmente com perfeição.

Diagrama de Venn para o intervalo de 0 fechado e 1 aberto
Sendo assim, temos que desmistificar o seguinte:

  1. O que é [?
    O [ indica que o número esta contido no intervalo, ou seja, o 0 faz parte do conjunto e consequentemente será gerado.
  2. O que é o )
    O ) indica que o número não faz parte do intervalo, ou seja, o 1 não será incluso nos valores gerado.

Sendo assim, é necessário no sorteio multiplicar o valor por 11, 101, 1001, pois o intervalo não incluirá o valor: 11, 101 ou 1001, e sim o valor logo abaixo: 10, 100, 1000.

Como feito no código da aula: Math.random() * 100 + 1, isso implica na remoção do 0, pois se Math.random() * 100 = 0, 0 + 1 = 1. Isso então sorteará um valor dentro do intervalo: (0, Math.random() * 100 + 1].

Para simplificar o entendimento, foi removido o valor 0 do conjunto e incluído o valor 100, sendo matematicamente descrito por: { x ∈ R ∣ 0 < x ≤ 1 }.

2 respostas

Olá, Jônatas! Como vai?

Quando a documentação diz que Math.random() retorna um número "maior ou igual a 0 e menor que 1", ela está se referindo ao intervalo [0, 1). Isso significa que:

  • O número 0 pode ser gerado, pois o intervalo é fechado à esquerda, indicado pelo colchete [.
  • O número 1 nunca será gerado, pois o intervalo é aberto à direita, indicado pelo parêntese ).

Na prática, ao multiplicar o resultado de Math.random() por um número, como 100, você está escalando esse intervalo para [0, 100). Se você quiser incluir 100 no intervalo de resultados possíveis, você pode ajustar a fórmula, por exemplo, usando Math.floor(Math.random() * 101), que gera números inteiros de 0 a 100.

No exemplo que você mencionou, Math.random() * 100 + 1, o intervalo resultante é (0, 101], pois:

  • Math.random() * 100 gera números entre 0 (inclusivo) e 100 (exclusivo).
  • Ao adicionar 1, você desloca esse intervalo para 1 (exclusivo) até 101 (inclusivo).

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
solução!

Opa, obrigado Armano por comentar.

O post foi para explicar mesmo, assim como tu também fez.

Esse entendimento fica meio confuso, e como é mostrado na aula acaba não sendo totalmente entendido.

Contudo, essa parte que tu disse: "Ao adicionar 1, você desloca esse intervalo para 1 (exclusivo) até 101 (inclusivo)". Verifique depois, mas não esta correta.

Por isso estou dizendo que fica confuso. Ao realizar esse cálculo: Math.random() * 100, o intervalo realmente é esse: 0 (inclusivo) e 100 (exclusivo). Mas, no casso acima, o intervalo é esse: 0 (exclusivo) e 100 (inclusivo).

Mas porque é assim? És a questão!

Porque, Math.random() * 100, gera um número que vai de 0-99, e quando adicionamos 1 (+ 1), alteramos o intervalo para: 1-100, pois cada valor é incrementado de 1 após a multiplicação. Ai tem que ficar ligado na precedência de operadores.

Obs.: Estou jugando que isso esta dentro de um: parseInt().