(PHP 8 >= 8.2.0)
Random\Engine\Xoshiro256StarStar::jump — Déplace de manière efficace le moteur en avant de 2^128 pas
Déplace l'état de l'algorithme en avant de 2128 pas, comme si Random\Engine\Xoshiro256StarStar::generate() était appelé 2128 fois.
L'objectif d'un saut est de faciliter la création d'un nouveau moteur Random\Engine\Xoshiro256StarStar à partir d'un moteur Random\Engine\Xoshiro256StarStar existant initialisé. Le moteur initialisé agit comme un modèle, qui peut être cloné et sauté à plusieurs reprises pour créer 2128 séquences non chevauchantes avec 2128 valeurs chacune.
Cette fonction ne contient aucun paramètre.
Aucune valeur n'est retournée.
Exemple #1 Exemple de 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;
}
// Même si les fibres s'exécutent dans un ordre aléatoire, elles imprimeront la même valeur
// à chaque fois, car chacune a sa propre instance unique du RNG.
$randomizer = new Randomizer();
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
$fiber->resume();
}
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
$fiber->resume();
}
?>
Résultat de l'exemple ci-dessus est similaire à :
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