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 — Kongruenzgenerator für Pseudozufallszahlen
lcg_value() gibt eine Pseudozufallszahl zwischen Null und Eins (inklusive) zurück. Die Funktion kombiniert zwei gemischte kongruente Kongruenzgeneratoren mit den Perioden 2^31 - 85 und 2^31 - 249. Die Periode der von dieser Funktion generierten Pseudozufallsfolge entspricht dem Produkt dieser beiden Primzahlen.
Diese Funktion erzeugt keine kryptografisch sicheren Werte und darf nicht für kryptografische Zwecke verwendet werden oder für Zwecke, bei denen die zurückgegebenen Werte nicht abschätzbar sein dürfen.
Falls kryptographisch sichere Zufallszahlen benötigt werden, kann der Random\Randomizer mit der Random\Engine\Secure-Engine verwendet werden. Für einfache Anwendungsfälle bieten die Funktionen random_int() und random_bytes() eine bequeme und sichere API, die den CSPRNG des Betriebssystems verwendet.
Wenn der Rückgabewert durch Multiplikation oder Addition auf ein anderes Intervall skaliert wird (eine sogenannte affine Transformation), kann dies zu einer Verzerrung des resultierenden Wertes führen, weil Gleitkommazahlen auf der Zahlengeraden nicht gleichmäßig dicht sind. Da nicht alle Werte exakt durch eine Gleitkommazahl dargestellt werden können, kann das Ergebnis der affinen Transformation auch zu Werten außerhalb des gewünschten Intervalls führen.
Um einen zufälligen Gleitkommawert innerhalb eines beliebigen Intervalls zu erzeugen, kann Random\Randomizer::getFloat() verwendet werden. Mit Random\Randomizer::getInt() kann eine zufällige ganze Zahl innerhalb eines beliebigen Intervalls erzeugt werden.
Diese Funktion besitzt keine Parameter.
Eine Pseudozufallszahl zwischen 0.0 und 1.0 (inklusive) als float.
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);
}?>