Lcg value: примеры (PHP)

Генерация псевдослучайных чисел через lcg_value
Раздел: Математические функции
lcg_value: float

Основные сведения о функции lcg_value

Функция lcg_value() генерирует псевдослучайное дробное число в диапазоне от 0.0 до 1.0 включительно. Она реализует линейный конгруэнтный генератор (LCG), который производит последовательность чисел на основе простой математической формулы.

Когда применяется функция
  • Для генерации случайных дробных чисел в простых задачах
  • В прототипировании, когда не требуется криптографическая стойкость
  • Для создания случайных величин в статистическом моделировании
  • В учебных целях для демонстрации работы ГПСЧ
Аргументы функции

Функция не принимает параметров. Вызов производится без аргументов.

Базовые примеры использования

Простой вызов функции
<?php
$random = lcg_value();
echo $random;
?>
0.123456789
Многократная генерация
<?php
for ($i = 0; $i < 3; $i++) {
    echo lcg_value() . "\n";
}
?>
0.415873245
0.732189156
0.019543278
Преобразование в другой диапазон
<?php
// Генерация числа от 5 до 15
$min = 5;
$max = 15;
$random = $min + lcg_value() * ($max - $min);
echo $random;
?>
11.23456789

Альтернативные функции в PHP

mt_rand() и rand()

mt_rand() использует алгоритм "Вихрь Мерсенна", который дает более качественные случайные числа и работает быстрее. rand() - устаревшая функция с менее предсказуемым поведением.

random_int() и random_bytes()

Функции криптографической безопасности, подходящие для генерации паролей и токенов. Работают медленнее, но обеспечивают криптографическую стойкость.

openssl_random_pseudo_bytes()

Генерирует криптографически безопасные псевдослучайные байты через OpenSSL.

Аналоги в других языках программирования

Lcg value в Python

Модуль random предоставляет функцию random() с аналогичным диапазоном:

import random
print(random.random())
0.5488135039273248

Lcg value в Javascript

Метод Math.random() возвращает число от 0 (включительно) до 1 (исключительно):

console.log(Math.random());
0.654321987654321

Lcg value в MySQL

Функция RAND() генерирует случайное число с плавающей точкой:

SELECT RAND();
0.726123456789

Распространенные ошибки

Передача аргументов
<?php
// Неправильно - функция не принимает параметров
$result = lcg_value(123);
?>
Warning: lcg_value() expects exactly 0 parameters, 1 given
Использование для криптографических целей
<?php
// Небезопасно для генерации токенов
$token = '';
for ($i = 0; $i < 32; $i++) {
    $token .= chr((int)(lcg_value() * 256));
}
?>
Ожидание целых чисел
<?php
// Функция всегда возвращает дробное число
$random = lcg_value();
if ($random > 0.5) {
    echo "Выпало больше 0.5";
}
?>

Изменения в версиях PHP

Функция lcg_value() остается стабильной на протяжении многих версий PHP. В PHP 7.1.0 внутренний алгоритм был изменен для использования одинакового генератора случайных чисел, что улучшило воспроизводимость последовательностей. В PHP 8.0 значительных изменений не внесено.

Расширенные примеры применения

Генерация случайного массива
Пример php
<?php
$array = array_map(function() {
    return lcg_value();
}, array_fill(0, 5, null));
print_r($array);
?>
Array
(
    [0] => 0.345678912
    [1] => 0.789123456
    [2] => 0.234567891
    [3] => 0.912345678
    [4] => 0.456789123
)
Имитация вероятностных событий
Пример php
<?php
$chance = 0.3; // 30% вероятность
$result = lcg_value() < $chance ? 'Событие произошло' : 'Событие не произошло';
echo $result;
?>
Событие произошло
Создание детерминированной последовательности
Пример php
<?php
srand(12345); // Установка начального значения
$first = lcg_value();
srand(12345); // Сброс к тому же начальному значению
$second = lcg_value();
echo "Первое: $first, Второе: $second";
?>
Первое: 0.162433, Второе: 0.162433
Интеграция с пользовательскими распределениями
Пример php
<?php
function exponential_random($lambda) {
    return -log(1 - lcg_value()) / $lambda;
}
echo exponential_random(0.5);
?>
1.23456789

PHP lcg_value function comments

En
Lcg value Combined linear congruential generator