Как работают генераторы случайных чисел

Думайте о каждом «семени» как о сундуке со льдом, а затем о случайных числах как о кубиках льда. Допустим, у вас есть 1000 сундуков с льдом, а в каждом сундуке 1000 кубиков льда. На окружной ярмарке они выберут ледяной сундук, чтобы начать использовать его для напитков, и они могут использовать только один кубик льда. Однако им нужны только кубики льда размером более 1 кубического дюйма. Таким образом, они выберут сундук случайным образом между этими 1000 сундуками, а затем выберут кубик льда внутри этого сундука наугад. Если это работает для размера, который они хотят, они используют это. Если это не так, они кладут его обратно в грудь вместе с остальными. Если они хотят сделать это немного более увлекательным, они меняют сундуки заранее для полного забвения, если хотите!

Как работают генераторы случайных чисел?

Я просто размышлял о rand() функции php и думал о том, как я мог бы ее переделать, и я пришел в полный оцепенение.

Как работают генераторы случайных чисел?

Генераторы случайных чисел (ГСЧ) действительно генерируют псевдослучайные числа, поскольку на самом деле невозможно сгенерировать ИСТИННОЕ случайное число. Единственные действительно случайные вещи — это поступки Бога, такие как молния.

Из того, что я понимаю, в основном есть две части ГСЧ: начальное число, а затем случайное число, выбранное из этого начального числа. Когда вы засеиваете ГСЧ, вы даете ему эквивалент начальной точки. Тогда у этой начальной точки есть набор цифр, которые находятся «внутри», из которых выбирает программа. В PHP вы можете использовать srand (), чтобы «перемешать» семена, так что вы почти всегда получаете другой ответ. Затем вы можете использовать rand (min, max), чтобы войти в семя и выбрать число между min и max включительно.

ВНИМАНИЕ, ВОЗМОЖНАЯ АНАЛОГИЯ СЫРОГО ВПЕРЕДИ!

Думайте о каждом «семени» как о сундуке со льдом, а затем о случайных числах как о кубиках льда. Допустим, у вас есть 1000 сундуков с льдом, а в каждом сундуке 1000 кубиков льда. На окружной ярмарке они выберут ледяной сундук, чтобы начать использовать его для напитков, и они могут использовать только один кубик льда. Однако им нужны только кубики льда размером более 1 кубического дюйма. Таким образом, они выберут сундук случайным образом между этими 1000 сундуками, а затем выберут кубик льда внутри этого сундука наугад. Если это работает для размера, который они хотят, они используют это. Если это не так, они кладут его обратно в грудь вместе с остальными. Если они хотят сделать это немного более увлекательным, они меняют сундуки заранее для полного забвения, если хотите!

Что касается того, как PHP на самом деле физически выбирает начальное число и случайное число, у меня недостаточно знаний для этого (что, вероятно, то, что вам было интересно больше всего!). Я бы не стал пытаться повторить функцию rand (); для большинства веб-приложений, которые вы создадите, rand () должно быть достаточно для любого случайного числа, которое вам нужно.

Создатели не гарантируют функционал на сто процентов, мотивируя это частыми обновлениями кода и общей работы Инстаграма.

Для чего он нужен

Организуя акцию с раздачей подарков, необходимо предоставить юзерам действительно честный процесс выбора. Делается это по-разному в зависимости от потребностей. Кому-то хватает простого объявления результата, другие же предпочитают более «вещественные» доказательства проведения жеребьевки. В таком случае просторы интернета предлагают множественные вариации, среди которых пользователь может определить наиболее привлекательный и подходящий генератор случайных чисел и людей в Инстаграм для онлайн-конкурса.

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

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

генератор случайных чисел для розыгрыша в инстаграм

Принцип

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

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

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

Обычно и не нужно таких сложностей, поэтому делается проще — ставится програмный генератор псевдослучайных чисел /dev/urandom, который периодически засеивается «абсолютно» случайным числом.
Кому нужно «абсолютно» случайное число может обращаться напрямую к /dev/random. Но он может исчерпаться и перестать выдавать числа.

Как работает генератор случайных чисел?

ThunderCat

Adamos

На самом деле, случайные числа нужны для нескольких целей, и алгоритма, подходящего для всех, нет и быть не может.
Для моделирования может быть важным нормальное распределение выпадающих чисел. Здесь и случайное число по формуле вполне прокатит.
Для игровых целей может быть важна именно высокая случайность числа (то есть, грубо говоря, вероятность выпадения 00000000, 0101010101 и 11111111 одинакова и не зависит от предыдущих выпадений).
Для безопасности обязательна невозможность выведения следующих чисел из предыдущих (или каких-то других условий).

Ну, а в идеале случайные числа вообще не должны вычисляться — если есть качественный поставщик энтропии. Это либо уже упомянутый аппаратный генератор, либо просто какие-то данные, которые невозможно восстановить или проанализировать одновременно с работой алгоритма. Зависит от конкретной задачи и условий.

TrueBers

качественный поставщик энтропии еще надо спроектировать доказать его случайность и т.д. и еще есть в нем есть физическое ограничение на скорость выдачи случайных чисел.

Обычно и не нужно таких сложностей, поэтому делается проще — ставится програмный генератор псевдослучайных чисел /dev/urandom, который периодически засеивается «абсолютно» случайным числом.
Кому нужно «абсолютно» случайное число может обращаться напрямую к /dev/random. Но он может исчерпаться и перестать выдавать числа.

Все случайные числа на самом деле псевдослучайные

3.2.1
The all-digital Entropy Source (ES), also known as a non-deterministic random bit generator (NRBG), provides a serial stream of entropic data in the form of zeroes and ones.

The ES runs asynchronously on a self-timed circuit and uses thermal noise within the silicon to output a random stream of bits at the rate of 3 GHz.

Stalker_RED

Рассказываю на пальцах.
Компьютер запомнил число (или кучу чисел), которое называется «случайная затравка» (random seed).
По команде «сгенерируй случайное число» он проводит два алгоритма.

1. Собственно генератор случайных чисел — преобразование seed → seed.
Например: seed := (37·seed + 234) mod 997.
(знаком :=, как в Паскале, я обозначил «переприсвоить»)

2. Интерпретация результатов: seed → Y*.
Например, y = seed/997.
Y — это [0…1), <1…6>или любое другое желаемое множество.
Y* — множество конечных последовательностей: каждый бросок генератора может не дать ни одного числа (и потребуется переброс), одно число, два числа… Например, наиболее известный генератор нормально распределённых чисел каждым броском даёт или ноль чисел (т.е. нужен переброс), или сразу два.

Затравку надо инициализировать чем-то действительно случайным, и для этого используют таймер, счётчик тактов и прочие труднопредсказуемые места. А ещё можно запомнить затравку и снова повторить ту же последовательность чисел (раньше это использовали для повторов и мультиплеера в играх).

Если же нужны настоящие случайные числа, да в большом количестве — это откровенно тяжело. В ход идут…
• таймеры и счётчики команд — ну, это понятно;
• шум в звуковой плате;
• задержки ввода с клавиатуры и мыши;
• аппаратные датчики случайных чисел на диодном шуме, применяемые в некоторых процессорах.
MacOS, например, этим добром не пользуется; и в dev/random, и в dev/urandom идёт один и тот же криптостойкий псевдослучайных генератор Ярроу.

Войдите, чтобы написать ответ

Чтобы получать случайные вещественные числа в иных пределах, отличных от [0; 1), прибегают к математическим приемам. Так если умножить полученное из random() число на любое целое, то получится вещественное в диапазоне от 0 до этого целого, не включая его:

Функция random() – «случайные» вещественные числа

Чтобы получить случайное вещественное число, или, как говорят, число с плавающей точкой, следует использовать функцию random() из одноименного модуля random языка Python. Она не принимает никаких аргументов и возвращает число от 0 до 1, не включая 1:

Результат содержит много знаков после запятой. Чтобы его округлить, можно воспользоваться встроенной в Python функцией round():

Чтобы получать случайные вещественные числа в иных пределах, отличных от [0; 1), прибегают к математическим приемам. Так если умножить полученное из random() число на любое целое, то получится вещественное в диапазоне от 0 до этого целого, не включая его:

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

В данном примере число умножается на 6. В результате получается число от 0 до 6. Прибавив 4, получаем число от 4 до 10.

Пример получения случайных чисел от -1 до 1:

Нижняя граница равна -1. При вычитании получается +. Когда добавляется нижняя граница, то плюс заменяется на минус ( +(-1) = — 1).

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

Вам также могут понравиться