PHP Conference Kansai 2025

Random\Engine\PcgOneseq128XslRr64::jump

(PHP 8 >= 8.2.0)

Random\Engine\PcgOneseq128XslRr64::jumpMove o mecanismo com eficiência para frente em várias etapas

Descrição

public Random\Engine\PcgOneseq128XslRr64::jump(int $advance): void

Avança o estado do algoritmo pelo número de passos dado por advance, como se Random\Engine\PcgOneseq128XslRr64::generate() fosse chamado essa quantidade de vezes.

Parâmetros

advance

O número de passos para avançar; deve ser 0 ou maior.

Valor Retornado

Nenhum valor é retornado.

Erros/Exceções

  • Se advance for menor que 0, um ValueError será gerado.

Exemplos

Exemplo #1 Exemplo de Random\Engine\PcgOneseq128XslRr64::jump()

<?php
$a
= new \Random\Engine\PcgOneseq128XslRr64(0);
$b = clone $a;

for (
$i = 0; $i < 1_000; $i++) {
$a->generate();
}
$b->jump(1_000);

echo
"A: ", bin2hex($a->generate()), "\n";
echo
"B: ", bin2hex($b->generate()), "\n";
?>

O exemplo acima produzirá:

A: e6d0d5813913a424
B: e6d0d5813913a424

Exemplo #2 Os métodos randomizadores podem chamar o mecanismo mais de uma vez

<?php
$a
= new \Random\Randomizer(new \Random\Engine\PcgOneseq128XslRr64(42659));
$b = new \Random\Randomizer(clone $a->engine);

$a->getInt(1, 1572864); // Executa duas chamadas para generate().
$a->getInt(1, 1572864);

$b->engine->jump(2);

// Porque a primeira chamada para ->getInt() chamou ->generate() duas vezes
// os mecanismos não correspondem após executar um ->jump(2).
echo "A: ", bin2hex($a->engine->generate()), "\n";
echo
"B: ", bin2hex($b->engine->generate()), "\n";

// Agora o mecanismo B corresponde ao mecanismo A.
echo "B: ", bin2hex($b->engine->generate()), "\n";
?>

O exemplo acima produzirá:

A: 1e9f3107d56653d0
B: a156c0086dd79d44
B: 1e9f3107d56653d0
adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top