javascript генерация случайного числа

Напишите функцию randomInteger(min, max) , которая генерирует случайное целое (integer) число от min до max (включительно).

Любое число из интервала min..max должно появляться с одинаковой вероятностью.

Пример работы функции:

Можно использовать решение из предыдущей задачи.

Содержание

  1. Простое, но неправильное решение
  2. Правильное решение задачи
  3. Базовая генерация
  4. Генерация между числами: минимальные и максимальные значения
  5. Случайное целое число в диапазоне, включая минимальное и максимальное.
  6. Подбрасывание монеты(случайное true или false)
  7. Генерация с исключениями
  8. Генерация случайного, неповторяющегося числа
  9. Криптография
  10. Комментарии ( 4 ):

Простое, но неправильное решение

Самое простое, но неправильное решение – генерировать случайное число от min до max и округлять его:

Функция будет работать, но неправильно. Вероятность получить min и max значения в 2 раза меньше, чем любое другое число.

Если вы запустите приведённый выше пример, то заметите, что 2 появляется чаще всего.

Это происходит потому, что метод Math.round() получает случайные числа из интервала 1..3 и округляет их следующим образом:

Теперь становится понятно, что 1 получает в 2 раза меньше значений, чем 2 . Тоже самое с 3 .

Правильное решение задачи

Есть много правильных решений этой задачи. Одно из них – правильно указать границы интервала. Чтобы выровнять интервалы, мы можем генерировать числа от 0.5 до 3.5 , это позволит добавить необходимые вероятности к min и max :

Другое правильное решение – это использовать Math.floor для получения случайного числа от min до max+1 :

Теперь все интервалы отображаются следующим образом:

Все интервалы имеют одинаковую длину, что выравнивает вероятность получения случайных чисел.

В javascript часто требуется сгенерировать случайное число. Например, чтобы нарисовать звезду в ночном небе или анимировать хаотические аттракторы. Однако существуют различные способы генерации, и от приложения зависит, какой вы будете использовать.

Базовая генерация

Самый простой способ получить случайное число — это метод Math.random(), встроенный в javascript.

Math.random() всегда возвращает число с плавающей точкой между 0 и 1.

Технически, число, которое вы получите, может быть 0, но никогда не будет точно 1.

Посколько это используется достаточно часто, Math.random() помещают внутрь функции

function getRandom()

Проблема, конечно, заключается в том, что функция всегда будет создавать случайное число в пределах очень ограниченного диапазона. Большинство других рецептов на этой странице предназначены для того, чтобы решить эту проблему.

Генерация между числами: минимальные и максимальные значения

Чтобы добавить эту функциональность, нам потребуется немного математики.

function getRandomFloat(min, max)

getRandomFloat(11, 101)
> 75.31898734299466

function getRandomInt(min, max)

getRandomInt(10, 20)
> 12

Случайное целое число в диапазоне, включая минимальное и максимальное.

function getRandomInRange(min, max)

7

Подбрасывание монеты(случайное true или false)

Если вам нужно получить просто 0 или 1, то используйте следующий код:

function coinToss()

coinToss();
> 0

Если нужно конкретно true или false

function coinToss()

coinToss();
> true

Если вам нужно ассоциировать любые слова со сторонами монеты

function coinFlip()

coinToss();
> up

Генерация с исключениями

Для ограниченного диапазона целых чисел: создайте массив чисел, которые вы бы хотели вырисовывать, и выберите из него случайное.

var numPool = [ 1, 3, 5, 7, 9, 10 ],
rand = numPool[Math.floor(Math.random() * numPool.length)];

Для чего-нибудь более динамичного: добавьте массив целых чисел, которые вы хотите исключить, и пустой массив, который будет содержать результат фильтрации первого массива во второй.

var numPool = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
var excludePool = [ 3, 4 ];
var filteredPool = [];

Затем создайте цикл по массиву numPool, проверьте, есть ли случайное число в массиве исключений excludePool, и поместите результат в массив filteredPool:

Наконец, отобразите случайное число из отфильтрованного массива

var rand = filteredPool[Math.floor(Math.random() * filteredPool.length)];

Генерация случайного, неповторяющегося числа

Для небольших наборов чисел: создайте массив, заполненный элементами, перетасуйте их случайным образом, поместите результат в новый массив, затем достаньте перетасованные элементы один раз:

var numPool = [ 13, 21, 36, 14, 27, 10 ];

function shuffle(numPool)
;
var randomResult = shuffle(numPool);
while( randomResult.length > 0 )

Для более больших наборов чисел: создайте и заполните массив случайными целыми числами, отклоняя любое, которое уже было ранее сгенерировано:

var numReserve = []
while (numReserve.length

В коде выше numReserve заполнен 12 случайными числами между 0 и 1000. Числа затем могут быть получены из массива.

Криптография

Всех показанных выше методов будет недостаточно для создания криптографически защищенных функций. Для этого мы можем использовать Web Cryptography API, создав типизированный массив:

var cryptoStor = new Uint16Array(8);

В этом случае мы создаем массив с 8 различными слотами, каждый из которых может содержать 16-битовое целое число без знака. Другие опции включают Int8Array, Uint8Array, int16Array, Int32Array и Uint32Array.

Теперь заполните массив случайными числами определенного типа

Показаны выбранные значения в консоли:

> [43484, 57947, 46691, 49849, 24272, 11827, 28203, 17423]

Web Cryptography API имеет хорошую поддержку в современных браузерах, хотя в некоторых нужно ставить префиксы.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 4 ):

    Здравствуйте! Можно вопрос не по теме статьи?

    Конечно, можно! Но задайте его, пожалуйста, в службу поддержки: http://support.myrusakov.ru/

    Спасибо! В следующий раз, уже ответили на javascript.ru

    Прекрасно! Рады за вас!

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2019 Русаков Михаил Юрьевич. Все права защищены.

    В этой записи, я хочу поделиться с вами тем, как можно сгенерировать случайное число в JavaScript.

    Генерация дробного рандомного числа может быть осуществлена с помощью функции ниже:

    Данная функция принимает два аргумента. Первое — это минимальное случайное число, а второе — максимальное.

    Например, если вы укажите — getRandomArbitrary(1, 10) , то в результате вы получите число в районе 1 и 10, которое будет выглядеть примерно так — 5.63726842 или вот так 9.27647264 и тд.

    Если вам нужно цельное число, то смотрите функцию ниже.

    Чтобы сделать цельное число в JavaScript можно использовать функцию ниже:

    Данная функция принимает такие же значения, что и функция сверху. Единственное различие в том, что она возвращает целое случайное число.

    Например, если вам нужно случайное число между 50 и 100, то вы можете получить его вот таким образом: getRandomInt(50, 100) и это вернет вам целое число (например: 55 или 90 и тд).

    Источник: computermaker.info

    Техника и Гаджеты
    Добавить комментарий