« Random\Engine\Xoshiro256StarStar::generate
Random\Engine\Xoshiro256StarStar::jumpLong »

Random\Engine\Xoshiro256StarStar::jump

(PHP 8 >= 8.2.0)

Random\Engine\Xoshiro256StarStar::jump — エンジンの内部状態を、効率的に 2^128 ステップ進める

説明

public function Random\Engine\Xoshiro256StarStar::jump(): void

Random\Engine\Xoshiro256StarStar::generate() が 2128 回呼ばれたかのように、 アルゴリズムのステートを 2128 回分進めます。

アルゴリズムの内部状態を進める目的は、 新しい Random\Engine\Xoshiro256StarStar エンジンを、既に存在する Random\Engine\Xoshiro256StarStar から生成するのを容易にするためです。 シードが与えられているエンジンは新しいエンジンの設計図として振る舞い、 clone することができ、 2128 の値を持つ 2128 個分の重ならないシーケンスを作るために、繰り返し内部状態を進めます。

パラメータ

この関数にはパラメータはありません。

戻り値

値を返しません。

例

例1 Random\Engine\Xoshiro256StarStar::jump() の例

<?php
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;

$blueprintRng = new Xoshiro256StarStar(0);

$fibers = [];
for ($i = 0; $i < 8; $i++) {
    $fiberRng = clone $blueprintRng;
    $blueprintRng->jump();

    $fiber = new Fiber(static function () use ($fiberRng, $i): void {
        $randomizer = new Randomizer($fiberRng);

        while (true) {
            Fiber::suspend();

            echo "{$i}: ", $randomizer->getInt(0, 100), "\n";
        }
    });
    $fiber->start();

    $fibers[] = $fiber;
}

// fiber はランダムな順番で実行されますが、それぞれの fiber
// は毎回同じ値を出力します。なぜなら、それぞれが独自のRNG(乱数生成器)
// のインスタンスを持つからです
$randomizer = new Randomizer();

$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
    $fiber->resume();
}

$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
    $fiber->resume();
}
?>

上の例の出力は、 たとえば以下のようになります。

4: 89
3: 10
2: 63
1: 75
6: 41
5: 56
0: 16
7: 60
7: 34
6: 58
1: 74
4: 63
3: 3
5: 42
2: 45
0: 86

参考

関連キーワード:
Random   Xoshiro   StarStar   Engine   fiber   fibers   エンジン   内部   jump   randomizer   効率的   ステップ   Randomizer   blueprintRng   fiberRng   generate   jumpLong   アルゴリズム   clone   Fiber   shuffleArray   foreach   resume   ステート   目的
関連する関数・ページ:
class.random-engine-xoshiro256starstar   random-engine-xoshiro256starstar.jumplong   random-engine-xoshiro256starstar.debuginfo   random-engine-xoshiro256starstar.serialize   random-engine-xoshiro256starstar.generate   random-engine-xoshiro256starstar.unserialize