Random\Engine\PcgOneseq128XslRr64::jump

エンジンの内部状態を、効率的に複数ステップ進める

説明

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

Random\Engine\PcgOneseq128XslRr64::generate が何回も呼ばれたかのように、 アルゴリズムのステートを advance で指定された回数分進めます。

パラメータ

advance

ステートを進める回数。 0 以上でなければなりません。

戻り値

値を返しません。

エラー / 例外

  • advance0 より小さい場合、 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