Для случайного целого включительно используйте floor(random × (max − min + 1)) + min. Сначала округлите границы внутрь диапазона и убедитесь, что он не пуст.
Генерация случайного числа в заданном диапазоне
Для случайного целого включительно используйте floor(random × (max − min + 1)) + min. Сначала округлите границы внутрь диапазона и убедитесь, что он не пуст.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Функция принимает два параметра start и end и возвращает случайное число, находящееся между ними (включительно).
Ответ
Для случайного целого включительно используйте floor(random × (max − min + 1)) + min. Сначала округлите границы внутрь диапазона и убедитесь, что он не пуст.
function randomInt(start, end) {
const min = Math.ceil(start), max = Math.floor(end);
if (!Number.isSafeInteger(min) || !Number.isSafeInteger(max) || min > max ||
!Number.isSafeInteger(max - min + 1)) throw new RangeError('Некорректный диапазон');
return min + Math.floor(Math.random() * (max - min + 1));
}
Здесь выбран контракт целого результата. Для вещественного числа обычная формула start + Math.random() * (end - start) имеет другую семантику границ. Math.random не подходит для криптографических секретов; точность и распределение ограничены генератором и Number.