PHP Conference Japan 2024

Random\Engine\Xoshiro256StarStar::jump

(PHP 8 >= 8.2.0)

Random\Engine\Xoshiro256StarStar::jump高效地将引擎向前移动 2^128 步

描述

public Random\Engine\Xoshiro256StarStar::jump(): void

将算法的状态向前移动 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

参见

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top