CakeFest 2024: The Official CakePHP Conference

lcg_value

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

lcg_valueГенерирует псевдослучайное число, применяя комбинированный линейный конгруэнтный метод

Описание

lcg_value(): float

Функция 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 включительно.

Смотрите также

  • Random\Randomizer::getFloat() - Получает равномерно выбранное число с плавающей точкой
  • Random\Randomizer::getInt() - Получает равномерно выбранное целое число
  • random_int() - Получает криптографически безопасное равномерно выбранное целое число

add a note

User Contributed Notes 3 notes

up
16
rok kralj gmail com
16 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