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