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 — Генерирует псевдослучайное число, применяя комбинированный линейный конгруэнтный метод
Функция lcg_value() возвращает псевдослучайное значение в диапазоне (0, 1). Функция комбинирует два конгруэнтных генератора с периодами 2^31 - 85 и 2^31 - 249. Период этой функции равен произведению обоих простых чисел.
Функция не создаёт криптографически безопасные значения и не должна использоваться в криптографических целях или целях, которые требуют, чтобы возвращаемые значения были недоступны для разгадывания.
Если нужна криптографически безопасная случайная последовательность, можно использовать класс Random\Randomizer с движком Random\Engine\Secure. Для простых сценариев существуют функции random_int() и random_bytes() с удобным API криптографически безопасного генератора псевдослучайных чисел (CSPRNG), поддерживаемого операционной системой.
Масштабирование возвращаемого значения для разных интервалов путём умножения или сложения (аффинного преобразования) может сместить результирующее значение, так как числа с плавающей точкой не одинаково плотные по всему ряду чисел. Поскольку не все значения можно точно представить числом с плавающей точкой, результат афинного преобразования также может вернуть значения, выходящие за пределы запрошенного интервала.
Чтобы сгенерировать случайное число с плавающей точкой в пределах произвольного интервала, вызывают метод Random\Randomizer::getFloat(). Для генерации случайного целого числа в пределах произвольного интервала вызывают метод Random\Randomizer::getInt().
У этой функции нет параметров.
Возвращает псевдослучайное число с плавающей точкой в диапазоне от 0.0 до 1.0 включительно.
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);
}?>