PHPCon Poland 2024

Random\Engine\Mt19937::__construct

(PHP 8 >= 8.2.0)

Random\Engine\Mt19937::__constructСоздаёт новый объект движка Mt19937

Описание

public Random\Engine\Mt19937::__construct(?int $seed = null, int $mode = MT_RAND_MT19937)

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

Поскольку механизм 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.
  • MT_RAND_PHP: Некорректная реализация для обратной совместимости с функцией mt_srand() до версии PHP 7.1.0.

Внимание

Эта функциональность объявлена УСТАРЕВШЕЙ начиная с PHP 8.3.0 и её крайне не рекомендуется использовать.

Примеры

Пример #1 Пример использования Random\Engine\Mt19937::__construct()

<?php
// Использование случайного 32-битного значения.
$e = new \Random\Engine\Mt19937();

$r = new \Random\Randomizer($e);
?>
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top