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

# Random\Engine\PcgOneseq128XslRr64::jump

(PHP 8 >= 8.2.0)

Random\Engine\PcgOneseq128XslRr64::jump — エンジンの内部状態を、効率的に複数ステップ進める

### 説明

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

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open