TL; DR
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Para obtener el número aleatorio
generateRandomInteger(-20, 20);
EXPLICACIÓN A CONTINUACIÓN
Necesitamos obtener un número entero aleatorio, digamos X entre min y max.
¿Derecha?
es decir,
min <= X <= max
Si restamos min de la ecuación, esto es equivalente a
0 <= (X - min) <= (máx - min)
Ahora, multipliquemos esto con un número aleatorio r
que es
0 <= (X - min) * r <= (máx - min) * r
Ahora, agreguemos de nuevo min a la ecuación
min <= min + (X - min) * r <= min + (max - min) * r
Ahora, elija una función que resulte en r de manera que satisfaga nuestro rango de ecuaciones como [min, max]. Esto solo es posible si 0 <= r <= 1
OKAY. Ahora, el rango de r, es decir, [0,1] es muy similar al resultado de la función Math.random (). ¿No es así?
La función Math.random () devuelve un número pseudoaleatorio de punto flotante en el rango [0, 1); es decir, desde 0 (inclusive) hasta pero sin incluir 1 (exclusivo)
Por ejemplo,
Caso r = 0
min
+ 0 * ( max
- min
) = min
Caso r = 1
min
+ 1 * ( max
- min
) = máx.
Caso aleatorio usando Math.random 0 <= r <1
min
+ r * ( max
- min
) = X , donde X tiene un rango de min <= X < max
El resultado anterior X es un número aleatorio. Sin embargo, debido a Math.random () nuestro límite izquierdo es inclusivo, y el límite derecho es exclusivo. Para incluir nuestro límite derecho, aumentamos el límite derecho en 1 y subimos el resultado.
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Para obtener el número aleatorio
generateRandomInteger(-20, 20)
;