(PHP 8 >= 8.2.0)
Random\Engine\PcgOneseq128XslRr64::jump — 高效地将引擎向前移动多个步骤
将算法的状态向前移动由 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