TL; DR
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Aby uzyskać liczbę losową
generateRandomInteger(-20, 20);
WYJAŚNIENIE PONIŻEJ
Musimy uzyskać losową liczbę całkowitą, powiedzmy X między min a max.
Dobrze?
tj.
min <= X <= maks
Jeśli odejmiemy min od równania, jest to równoważne z
0 <= (X - min) <= (maks. - min)
Teraz pomnóżmy to przez losową liczbę r,
która jest
0 <= (X - min) * r <= (max - min) * r
Teraz dodajmy z powrotem min do równania
min <= min + (X - min) * r <= min + (max - min) * r
Teraz, pozwala wybrał funkcję, która powoduje R w taki sposób, że spełnia równanie jako zakres naszego [min, X, max]. Jest to możliwe tylko wtedy, gdy 0 <= r <= 1
OK. Teraz zakres r ie [0,1] jest bardzo podobny do wyniku funkcji Math.random (). Czyż nie
Funkcja Math.random () zwraca liczbę zmiennoprzecinkową, pseudolosową w zakresie [0, 1); to znaczy od 0 (włącznie) do, ale nie wliczając 1 (wyłącznie)
Na przykład,
Przypadek r = 0
min
+ 0 * ( max
- min
) = min
Przypadek r = 1
min
+ 1 * ( max
- min
) = maks
Przypadek losowy przy użyciu Math.random 0 <= r <1
min
+ r * ( max
- min
) = X , gdzie X ma zakres min <= X < maks
Powyższy wynik X jest losową liczbą. Jednak ze względu na Math.random () nasza lewa granica jest włączająca, a prawa granica jest wyłączna. Aby uwzględnić naszą prawą granicę, zwiększamy prawą granicę o 1 i podnosimy wynik.
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Aby uzyskać liczbę losową
generateRandomInteger(-20, 20)
;