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 — Générateur de congruence combinée linéaire
lcg_value() retourne un nombre pseudo aléatoire,
compris entre 0 et 1. lcg_value() combine deux
générateurs de congruence, de périodes respectives
2^31 - 85
et 2^31 - 249
.
La période de cette fonction est le produit de ces deux
nombres premiers (soit (2^31 - 85)*(2^31 - 249)
).
Cette fonction ne génère pas de valeurs cryptographiquement sûres, et ne doit pas être utilisée à des fins cryptographiques, ou à des fins qui exigent que les valeurs renvoyées soient indéchiffrables.
Si de l'aléatoire cryptographiquement sûre est requis, le Random\Randomizer peut être utilisé avec le moteur Random\Engine\Secure. Pour des cas d'usage simple, les fonctions random_int() et random_bytes() fournissent une API pratique et sûre qui est qui est soutenu par le CSPRNG du système d'exploitation.
Mettre à l'échelle la valeur de retour vers un intervalle différent en utilisant la multiplication ou l'addition (une transformation affine) peut entraîner un biais dans la valeur résultante car les nombres flottants ne sont pas également répartis sur la ligne des nombres. Comme toutes les valeurs ne peuvent pas être exactement représentées par un nombre flottant, le résultat de la transformation affine peut également donner des valeurs en dehors de l'intervalle demandé.
Utilisez Random\Randomizer::getFloat() pour générer un nombre flottant aléatoire dans un intervalle arbitraire. Utilisez Random\Randomizer::getInt() pour générer un entier aléatoire dans un intervalle arbitraire.
Cette fonction ne contient aucun paramètre.
Une valeur pseudo aléatoire, dans l'intervalle de 0.0 à 1.0 inclus.
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);
}?>