PHP Conference Japan 2024

Random\Engine\PcgOneseq128XslRr64::jump

(PHP 8 >= 8.2.0)

Random\Engine\PcgOneseq128XslRr64::jump有效率地將引擎向前移動多個步驟

說明

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

將演算法的狀態向前移動 advance 指定的步數,如同呼叫 Random\Engine\PcgOneseq128XslRr64::generate() 那麼多次。

參數

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 隨機產生器方法可能會呼叫引擎多次

<?php
$a
= new \Random\Randomizer(new \Random\Engine\PcgOneseq128XslRr64(42659));
$b = new \Random\Randomizer(clone $a->engine);

$a->getInt(1, 1572864); // 執行兩次 generate() 呼叫。
$a->getInt(1, 1572864);

$b->engine->jump(2);

// 因為第一次呼叫 ->getInt() 時呼叫了兩次 ->generate()
// 所以在執行 ->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
新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top