(PHP 8 >= 8.2.0)
Random\Engine\Xoshiro256StarStar::jump — 有效地将引擎提前 2^128 步
将算法的状态提前 2128 步,就好像 Random\Engine\Xoshiro256StarStar::generate() 被调用了 2128 次。
跳转的目的是便于从现有的已播种的 Random\Engine\Xoshiro256StarStar 引擎创建新的 Random\Engine\Xoshiro256StarStar 引擎。已播种的引擎充当蓝图,可以 克隆 并反复跳转以创建 2128 个不重叠的序列,每个序列包含 2128 个值。
此函数没有参数。
不返回值。
示例 #1 Random\Engine\Xoshiro256StarStar::jump() 示例
<?php
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;
$blueprintRng = new Xoshiro256StarStar(0);
$fibers = [];
for ($i = 0; $i < 8; $i++) {
$fiberRng = clone $blueprintRng;
$blueprintRng->jump();
$fiber = new Fiber(static function () use ($fiberRng, $i): void {
$randomizer = new Randomizer($fiberRng);
while (true) {
Fiber::suspend();
echo "{$i}: ", $randomizer->getInt(0, 100), "\n";
}
});
$fiber->start();
$fibers[] = $fiber;
}
// 即使协程以随机顺序执行,它们每次都会打印相同的值,
// 因为每个协程都有自己唯一的 RNG 实例。
$randomizer = new Randomizer();
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
$fiber->resume();
}
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
$fiber->resume();
}
?>
上面的示例将输出类似于以下内容
4: 89 3: 10 2: 63 1: 75 6: 41 5: 56 0: 16 7: 60 7: 34 6: 58 1: 74 4: 63 3: 3 5: 42 2: 45 0: 86