Генерация случайного числа в заданном диапазоне

Для случайного целого включительно используйте 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее