mt_srand

(PHP 4, PHP 5, PHP 7, PHP 8)

mt_srandУстанавливает начальное значение для инициализации генератора псевдослучайных чисел на базе Вихря Мерсе́нна

Описание

mt_srand(?int $seed = null, int $mode = MT_RAND_MT19937): void

Функция устанавливает значение параметра seed как начальное значение для инициализации генератора псевдослучайных чисел. При пропуске параметра seed генерируется псевдослучайное начальное значение.

Замечание: Устанавливать начальное значение для инициализации генератора псевдослучайных чисел функциями srand() или mt_srand() не требуется, поскольку значение инициализируется автоматически.

Предостережение

Поскольку механизм Mt19937 ("Mersenne Twister") принимает в качестве значения только одно 32-битное целое число, количество возможных случайных последовательностей ограничено всего 232 (то есть 4 294 967 296), несмотря на огромный период Mt19937, равный 219937-1.

Дубликаты появятся гораздо раньше, если полагаться на неявное или явное случайное значение. Дублированные значения ожидаются с 50% вероятностью после менее чем 80 000 случайно сгенерированных значений в соответствии с проблемой дня рождения. Вероятность дублирования значений составляет 10% после случайной генерации примерно 30 000 значений.

Это делает алгоритм Mt19937 непригодным для генерации последовательностей, в которых дублирование возникает с ничтожной вероятностью. Если требуется воспроизводимое значение, то движки Random\Engine\Xoshiro256StarStar и Random\Engine\PcgOneseq128XslRr64 поддерживают гораздо большие значения, которые вряд ли столкнутся случайно. Если воспроизводимость не требуется, механизм Random\Engine\Secure генерирует криптографически безопасную случайную последовательность.

Список параметров

seed

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

При пропуске параметра seed или при установке значения null начальное значение инициализируется случайным беззнаковым 32-битным числом.

mode

Следующие константы задают алгоритм генерации.

  • MT_RAND_MT19937: Корректная реализация алгоритма Mt19937, доступна с PHP 7.1.0.
  • MT_RAND_PHP Переключает генератор на работу с некорректной реализацией алгоритма Mersenne Twister. Генератор работал с этим алгоритмом по умолчанию до PHP 7.1.0. Режим доступен для обратной совместимости.

Внимание

Начиная с PHP 8.3.0 функциональность УСТАРЕЛА. Полагаться на функциональность настоятельно не рекомендуют.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Список изменений

Версия Описание
8.3.0 Параметр seed теперь принимает значение null.
7.1.0 Функция srand() стала псевдоним функции mt_srand().
7.1.0 Алгоритм функции mt_rand() исправили и теперь функция работает с корректной версией Вихря Мерсе́нна. Для возврата к старому поведению во второй параметр функции mt_srand() передают константу MT_RAND_PHP.

Смотрите также

  • mt_rand() - Генерирует случайное значение через генератор случайных чисел на базе Вихря Мерсе́нна
  • mt_getrandmax() - Показывает максимально возможное значение случайного числа
  • srand() - Устанавливает начальное значение для инициализации генератора псевдослучайных чисел