An elegant way to return random float between two numbers:
<?php
function random_float ($min,$max) {
return ($min+lcg_value()*(abs($max-$min)));
}
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
lcg_value — Gerador congruente linear combinado
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.
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.
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.
Esta função não possui parâmetros.
Um valor flutuante pseudoaleatório entre 0,0 e 1,0, inclusive.
An elegant way to return random float between two numbers:
<?php
function random_float ($min,$max) {
return ($min+lcg_value()*(abs($max-$min)));
}
?>
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);
}?>