PHP 8.4.1 Released!

Random\Engine\PcgOneseq128XslRr64::jump

(PHP 8 >= 8.2.0)

Random\Engine\PcgOneseq128XslRr64::jumpЭффективное перемещение движка вперёд на несколько шагов

Описание

public Random\Engine\PcgOneseq128XslRr64::jump(int $advance): void

Перемещает состояние алгоритма вперёд на количество шагов, заданное параметром advance, как если бы функция Random\Engine\PcgOneseq128XslRr64::generate() была вызвана столько раз.

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

advance

Количество шагов для продвижения вперёд; должно быть 0 или больше.

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

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

Ошибки

  • Если параметр advance меньше 0, будет выброшено исключение ValueError.

Примеры

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

<?php
$a
= new \Random\Engine\PcgOneseq128XslRr64(0);
$b = clone $a;

for (
$i = 0; $i < 1_000; $i++) {
$a->generate();
}
$b->jump(1_000);

echo
"A: ", bin2hex($a->generate()), "\n";
echo
"B: ", bin2hex($b->generate()), "\n";
?>

Результат выполнения приведённого примера:

A: e6d0d5813913a424
B: e6d0d5813913a424

Пример #2 Методы Randomizer могут вызывать движок более одного раза

<?php
$a
= new \Random\Randomizer(new \Random\Engine\PcgOneseq128XslRr64(42659));
$b = new \Random\Randomizer(clone $a->engine);

$a->getInt(1, 1572864); // Выполняет два вызова generate().
$a->getInt(1, 1572864);

$b->engine->jump(2);

// Потому что первый вызов ->getInt() вызвал ->generate() дважды
// движки не совпадают после выполнения ->jump(2).
echo "A: ", bin2hex($a->engine->generate()), "\n";
echo
"B: ", bin2hex($b->engine->generate()), "\n";

// Теперь движок B соответствует движку A.
echo "B: ", bin2hex($b->engine->generate()), "\n";
?>

Результат выполнения приведённого примера:

A: 1e9f3107d56653d0
B: a156c0086dd79d44
B: 1e9f3107d56653d0
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top