TL; DR
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Para obter o número aleatório
generateRandomInteger(-20, 20);
EXPLICAÇÃO ABAIXO
Precisamos obter um número inteiro aleatório, digamos X entre min e max.
Direita?
ie
min <= X <= max
Se subtrairmos min da equação, isso é equivalente a
0 <= (X - min) <= (max - min)
Agora, vamos multiplicar isso com um número aleatório r
que é
0 <= (X - min) * r <= (max - min) * r
Agora, vamos adicionar de volta min à equação
min <= min + (X - min) * r <= min + (max - min) * r
Agora, vamos escolher uma função que resulte em r tal que satisfaça nosso intervalo de equações como [min, max]. Isso só é possível se 0 <= r <= 1
ESTÁ BEM. Agora, o intervalo de r, ou seja, [0,1] é muito semelhante ao resultado da função Math.random (). Não é?
A função Math.random () retorna um número pseudo-aleatório de ponto flutuante no intervalo [0, 1); ou seja, de 0 (inclusive) até mas não incluindo 1 (exclusivo)
Por exemplo,
Caso r = 0
min
+ 0 * ( max
- min
) = min
Caso r = 1
min
+ 1 * ( max
- min
) = máx.
Caso aleatório usando Math.random 0 <= r <1
min
+ r * ( max
- min
) = X , em que X tem um intervalo de min <= X < max
O resultado acima X é um numérico aleatório. No entanto, devido a Math.random (), nosso limite esquerdo é inclusivo e o limite direito é exclusivo. Para incluir nosso limite direito, aumentamos o limite direito em 1 e calculamos o resultado.
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Para obter o número aleatório
generateRandomInteger(-20, 20)
;