Random\Engine\Xoshiro256StarStar::jumpLong

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

説明

public void Random\Engine\Xoshiro256StarStar::jumpLong()

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

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

このメソッドは、 Random\Engine\Xoshiro256StarStar::jump と組み合わせることができます。 そうすることで、このメソッドが生成した 264 回数分のシーケンスを、 2128 の値をそれぞれ持つ 264 回分のシーケンスに分割できます。

パラメータ

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

戻り値

値を返しません。

例1 Random\Engine\Xoshiro256StarStar::jumpLong の例

<?php
$blueprintRng = new \Random\Engine\Xoshiro256StarStar(0);

// 親となるエンジンは、それぞれ 値 2**192 のチャンクを持ちます
$parent1 = clone $blueprintRng;
$blueprintRng->jumpLong();

$parent2 = clone $blueprintRng;
$blueprintRng->jumpLong();

// 子となるエンジンは、親のエンジンが持つ値 2**192 のチャンク
// から取得した、値 2**128 のチャンクをそれぞれ持ちます
$child1a = clone $parent1;
$parent1->jump();
$child1b = clone $parent1;
$parent1->jump();

$child2a = clone $parent2;
$parent2->jump();
$child2b = clone $parent2;
$parent2->jump();

echo "Child 1A: ", bin2hex($child1a->generate()), "\n";
echo "Child 1B: ", bin2hex($child1b->generate()), "\n";
echo "Child 2A: ", bin2hex($child2a->generate()), "\n";
echo "Child 2B: ", bin2hex($child2b->generate()), "\n";
?>

上の例の出力は以下となります。

Child 1A: b4f275cb365fec99
Child 1B: 2cd646c8ed156237
Child 2A: eb3729a722a504e7
Child 2B: d4208dc85bdd6dc3

参考

  • Random\Engine\Xoshiro256StarStar::jump