Рандомные числа в диапазоне
Случайный номер билета от 1 до 1 000, тестовый ID в пределах 100–999 или скидка 5–25 % – всё это требует одного: получить рандомные числа в диапазоне. Онлайн-калькулятор выдаёт результат за секунду, но при написании скриптов или проверке честности розыгрыша важно понимать, как работает алгоритм.
Калькулятор выше принимает минимальное и максимальное значение. Можно выбрать целое число или дробное с заданной точностью, а также получить сразу серию значений – это удобно для случайных выборок и тестовых наборов данных.
Как сгенерировать рандомные числа в диапазоне
Базовый инструмент в JavaScript – метод Math.random(). Он возвращает псевдослучайное число с плавающей запятой от 0 (включительно) до 1 (не включая). Чтобы перенести результат в нужный отрезок, используют простую математику.
Для целых чисел, включающих обе границы, подходит формула:
Math.floor(Math.random() * (max - min + 1)) + min;
Здесь (max - min + 1) задаёт точное количество возможных значений. Сначала Math.random() умножается на это количество, затем Math.floor() округляет результат вниз до ближайшего целого, а добавление min смещает диапазон к нужным границам. Например, для отрезка от 1 до 10 вы получите одно из десяти равновероятных чисел: 1, 2, 3 и так далее до 10 [htmlacademy.ru].
В чём разница между включением и исключением границ?
Не всегда нужно, чтобы верхняя граница входила в итоговый набор. Тогда используют формулу без добавления единицы:
Math.floor(Math.random() * (max - min)) + min;
Поскольку Math.random() теоретически не достигает 1, произведение никогда не станет равным (max - min), а значит итоговое число никогда не дойдёт до max. Такой подход часто применяют при работе с индексами массивов, где верхняя граница должна оставаться недостижимой [dev-gang.ru].
Как получить дробное случайное значение?
Если округление не требуется, формула упрощается до:
Math.random() * (max - min) + min;
Результат будет дробным, и его точность зависит от реализации движка JavaScript. Чтобы зафиксировать количество знаков после запятой, умножьте число на 100 (два знака), примените Math.round(), а затем разделите на 100. Это избавляет от длинных хвостов вроде 7,539999.
Где применяют рандомные числа?
- Розыгрыши и лотереи. Генератор выбирает победителя среди номеров участников.
- Тестирование ПО. Случайные входные данные проверяют стабильность программы при непредсказуемой нагрузке.
- Игровая механика. От броска кубика до процедурной генерации мира.
- Статистика. Формирование репрезентативной выборки из большей совокупности.
Почему важно различать генераторы для обычных и криптографических задач?
Math.random() создаёт псевдослучайную последовательность. Это значит, что при известном начальном состоянии алгоритма числа можно предсказать. Для розыгрышей, тестов и игр этого достаточно. Однако для генерации паролей, токенов доступа и ключей шифрования используйте crypto.getRandomValues(). Этот метод работает медленнее, но обеспечивает криптографическую стойкость.
Все расчёты носят информационный характер. Для криптографических задач используйте специализированные инструменты.