PHP lcg_value() 函数

定义和用法

lcg_value() 函数通过线性同余生成器(LCG,Linear Congruential Generator)返回一个范围为 (0, 1) 的伪随机浮点数。该函数结合了两个具有不同周期的同余生成器,周期大约为 2^31。

提示:LCG 是一种快速但简单的伪随机数生成算法,适用于不需要高随机性或密码学安全的场景。如需更好的随机性,可以考虑使用 mt_rand() / mt_srand() 组合;如需加密安全,请使用 random_int()random_bytes()

语法

lcg_value(): float
参数 描述
该函数没有参数。

返回值

返回一个介于 0(包含)和 1(不包含)之间的伪随机浮点数,即 0 <= 返回值 < 1

PHP 版本

  • PHP 4+
  • PHP 5+
  • PHP 7+
  • PHP 8+

示例

示例 1:基本用法

<?php
echo lcg_value() . "<br>";  // 例如 0.123456789
echo lcg_value() . "<br>";  // 例如 0.987654321
?>

输出(示例):

0.123456789
0.987654321

示例 2:生成指定范围内的随机浮点数

<?php
// 生成 [min, max) 范围内的随机浮点数
function randomFloat($min, $max) {
    return $min + lcg_value() * ($max - $min);
}

echo randomFloat(1, 100) . "<br>";   // 例如 42.567
echo randomFloat(-10, 10) . "<br>"; // 例如 -3.14159
?>

输出(示例):

42.567
-3.14159

示例 3:模拟掷骰子(1 到 6 的整数)

<?php
function rollDice() {
    return floor(lcg_value() * 6) + 1;
}

echo "掷骰子结果: " . rollDice();
?>

输出(示例):

掷骰子结果: 4

相关函数

  • rand() - 生成随机整数
  • mt_rand() - 使用 Mersenne Twister 算法生成更好的随机数
  • random_int() - 生成加密安全的随机整数
  • srand() - 设置 rand() 的随机数种子
  • mt_srand() - 设置 mt_rand() 的随机数种子

注意事项

重要:
  • lcg_value() 的随机性质量一般,不适合需要高随机性或安全性的场景(如加密、抽奖等)。
  • 该函数不依赖任何种子函数(如 srand),其种子在每次请求时自动初始化,因此在不同的 PHP 进程中序列不可预测。
  • 返回值为浮点数,精度取决于平台(通常为双精度 64 位 IEEE 754)。
  • 如果需要加密安全的随机浮点数,可以将 random_int() 生成的整数转换为浮点数,但需注意范围调整。