Как работает функция PHP Rand ()? - PullRequest
0 голосов
/ 10 мая 2018

Интересно, как работает функция PHP Rand ()? Я имею в виду; Как эта функция рандомизирует числа без какого-либо правила или какой-либо другой функции рандомизации?

Например, у меня есть такой массив:

$numbers = array(0,1,2,3,4,5,6,7,8,9);

Так, как я могу рандомизировать эти числа без rand (), array_rand () и т.д ..

Основной вопрос:

Как работает функция рандомизации?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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

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

Мы принимаем начальное значение в качестве «семени», s.(Это может быть текущее время, введенное пользователем «случайное» значение или даже истинная случайная энтропия, полученная из некоторого источника энтропии )

Затем мы берем s и применяем функцию,f, чтобы получить новое значение s' (s-штрих) (эта функция часто является функцией по модулю или функцией хеширования)

Затем мы можем повторить этот процесс до бесконечности, добавляя s' в f, получая s'' и т. д.

Эта последовательность результатов из f является нашими "случайными" числами.

Но, надеюсь, вы поняли, f остался прежним и всегда будет выдавать один и тот же вывод при одном и том же вводе.

Так что, если мы дадим ему одинаковое начальное начальное число s, мы всегда получим одинаковую последовательность s', s'', s''' ...

Вот почему мы называем их "Псуедо" случайными.Если вы не знаете начальное семя и не наблюдаете последовательность слишком долго, это кажется случайным.Но если мы знаем используемую функцию f и начальное начальное число s, мы можем предсказать, какое значение получит rand().

0 голосов
/ 10 мая 2018

Как правило, это зависит от времени, основанного на количестве миллисекунд или даже наносекунд. и мы можем мультиплеировать начальное число с некоторым фиксированным значением, чтобы получить конкретный результат, в большинстве случаев от 0 до 1 Например: считая, что число - это семя секунд.

numberi+1 = (a * numberi + c) mod m
...