(PHP 8 >= 8.2.0)
Random\Engine\PcgOneseq128XslRr64::jump — エンジンの内部状態を、効率的に複数ステップ進める
Random\Engine\PcgOneseq128XslRr64::generate()
が何回も呼ばれたかのように、
アルゴリズムのステートを advance
で指定された回数分進めます。
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() を2回呼ぶ
$a->getInt(1, 1572864);
$b->engine->jump(2);
// 最初の ->getInt() のコールは ->generate() を2回呼んでいるので
// ->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