PHP 8.4.1 Released!

Random\Engine\Xoshiro256StarStar::jump

(PHP 8 >= 8.2.0)

Random\Engine\Xoshiro256StarStar::jumpDéplace de manière efficace le moteur en avant de 2^128 pas

Description

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

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.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

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

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top