PHPCon Poland 2024

lcg_value

(PHP 4, PHP 5, PHP 7, PHP 8)

lcg_valueGerador congruente linear combinado

Descrição

lcg_value(): float

lcg_value() retorna um número pseudoaleatório no intervalo de (0, 1). A função combina dois CGs com períodos de 2^31 - 85 e 2^31 - 249. O período desta função é igual ao produto de ambos os primos.

Cuidado

Esta função não gera valores criptograficamente seguros e não deve ser usada para propósitos criptográficos ou fins que exijam que os valores retornados sejam impossíveis de adivinhar.

Se aleatoriedade criptograficamente segura for necessária, a classe Random\Randomizer pode ser usada com o mecanismo Random\Engine\Secure. Para casos de uso simples, as funções random_int() e random_bytes() fornecem uma API conveniente e segura que é garantida pelo CSPRNG do sistema operacional.

Cuidado

Escalar o valor de retorno para um intervalo diferente usando multiplicação ou adição (também chamado de transformação afim) pode resultar em uma tendência no valor resultante, pois os pontos flutuantes não são igualmente densos ao longo da reta numérica. Como nem todos os valores podem ser representados exatamente por um ponto flutuante, o resultado da transformação afim também pode resultar em valores fora do intervalo solicitado.

Use Random\Randomizer::getFloat() para gerar um float aleatório dentro de um intervalo arbitrário. Use Random\Randomizer::getInt() para gerar um número inteiro aleatório dentro de um intervalo arbitrário.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Um valor flutuante pseudoaleatório entre 0,0 e 1,0, inclusive.

Veja Também

add a note

User Contributed Notes 3 notes

up
16
rok kralj gmail com
17 years ago
An elegant way to return random float between two numbers:

<?php
function random_float ($min,$max) {
return (
$min+lcg_value()*(abs($max-$min)));
}
?>
up
15
daniel dot baulig at gmx dot de
14 years ago
Choose your weapon:
<?php
function mt_randf($min, $max)
{
return
$min + abs($max - $min) * mt_rand(0, mt_getrandmax())/mt_getrandmax();
}
function
lcg_randf($min, $max)
{
return
$min + lcg_value() * abs($max - $min);
}
function
randf($min, $max)
{
return
$min + rand(0,getrandmax()) / getrandmax() * abs($max - $min);
}
?>
up
-36
Linndows
7 years ago
I think best example...
<?php
$x
=0;
while(
$x<=5){
$x++;
echo
lcg_value()+$x."\n"; }
echo
lcg_value()+$x-(2*lcg_value()); echo "\n";
?>
To Top