TL; DR
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Для отримання випадкового числа
generateRandomInteger(-20, 20);
Пояснення нижче
Нам потрібно отримати випадкове ціле число, скажімо, X між min та max.
Правильно?
тобто
min <= X <= макс
Якщо відняти від рівняння хв, це еквівалентно
0 <= (X - хв) <= (макс - хв)
Тепер давайте помножимо це на випадкове число r,
яке є
0 <= (X - хв) * r <= (max - хв) * r
Тепер давайте додаємо хв до рівняння
min <= min + (X - min) * r <= min + (max - min) * r
Тепер виберемо функцію, в результаті якої r така, що вона відповідає нашому діапазону рівнянь як [min, max]. Це можливо лише в тому випадку, якщо 0 <= r <= 1
ДОБРЕ. Тепер діапазон r, тобто [0,1], дуже схожий на результат функції Math.random (). Чи не так?
Функція Math.random () повертає псевдовипадкове число з плаваючою комою в діапазоні [0, 1); тобто від 0 (включно) до 1, але не включаючи 1 (виключно)
Наприклад,
Випадок r = 0
min
+ 0 * ( max
- min
) = хв
Випадок r = 1
min
+ 1 * ( max
- min
) = макс
Випадковий випадок з використанням Math.random 0 <= r <1
min
+ r * ( max
- min
) = X , де X має діапазон min <= X < max
Вищенаведений результат X є випадковим числовим числом. Однак завдяки Math.random () наша ліва межа включена, а права межа виключна. Для включення правої межі ми збільшуємо праву межу на 1 і поверх результату.
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
Для отримання випадкового числа
generateRandomInteger(-20, 20)
;