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 步,如同呼叫了 2128Random\Engine\Xoshiro256StarStar::generate()

jump 的目的是要從現有的已設定種子的 Random\Engine\Xoshiro256StarStar 引擎,建立新的 Random\Engine\Xoshiro256StarStar 引擎。已設定種子的引擎就像一個藍圖,可以被複製並重複執行 jump,以建立 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