Lcg value: примеры (PHP)
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() - устаревшая функция с менее предсказуемым поведением.
Функции криптографической безопасности, подходящие для генерации паролей и токенов. Работают медленнее, но обеспечивают криптографическую стойкость.
Генерирует криптографически безопасные псевдослучайные байты через 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
$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
$chance = 0.3; // 30% вероятность
$result = lcg_value() < $chance ? 'Событие произошло' : 'Событие не произошло';
echo $result;
?>Событие произошло
<?php
srand(12345); // Установка начального значения
$first = lcg_value();
srand(12345); // Сброс к тому же начальному значению
$second = lcg_value();
echo "Первое: $first, Второе: $second";
?>Первое: 0.162433, Второе: 0.162433
<?php
function exponential_random($lambda) {
return -log(1 - lcg_value()) / $lambda;
}
echo exponential_random(0.5);
?>1.23456789