CascadiaPHP 2024

Random\Engine\PcgOneseq128XslRr64::jump

(PHP 8 >= 8.2.0)

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

説明

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

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
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top