lcg_value
(PHP 4, PHP 5, PHP 7, PHP 8)
lcg_value — 複合線形合同法
この関数は PHP 8.4.0 で 非推奨になります。この関数に頼らないことを強く推奨します。
説明
lcg_value() は、(0, 1)の範囲の疑似乱数を返します。 この関数は、周期が 2^31 - 85 および 2^31 - 249 の 2 つの CG を組み合わせます。 この関数の周期はこれら 2 つの素数の積と等価です。
この関数が生成する値は、暗号学的にセキュアではありません。そのため、これを暗号や、戻り値を推測できないことが必須の値として使っては いけません。
暗号学的にセキュアな乱数が必要な場合は、Random\Randomizer を Random\Engine\Secure と一緒に使いましょう。簡単なユースケースの場合、random_int() と random_bytes() 関数が、オペレーティングシステムの CSPRNG を使った、 便利で安全な API を提供します。
乗算や加算(いわゆるアフィン変換)を使って、この関数の戻り値を異なる区間に拡大/縮小すると、結果の値に偏りが出るかもしれません。なぜなら、浮動小数点数は数直線上で均一に分布するわけではないからです。全ての値が浮動小数点数によって正確に表現できるとは限らないので、アフィン変換の結果が求める区間から外れた値になってしまう可能性もあります。
任意の区間内で、ランダムな浮動小数点数の値を生成する場合、 Random\Randomizer::getFloat() を使いましょう。 任意の区間内で、ランダムな整数の値を生成する場合、 Random\Randomizer::getInt() を使いましょう。
パラメータ
この関数にはパラメータはありません。
戻り値
0.0 と 1.0 の範囲の疑似乱数(0.0 と 1.0 を含みます)を、 浮動小数点数で返します。
変更履歴
バージョン | 説明 |
---|---|
8.4.0 | この関数は非推奨となりました。 |
参考
- Random\Randomizer::getFloat() - 等確率に選んだ float の値を取得する
- Random\Randomizer::getInt() - 等確率に選ばれる整数を取得する
- random_int() - 暗号学的にセキュアな方法で、等確率に出る整数を取得する
User Contributed Notes 2 notes
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);
}?>
An elegant way to return random float between two numbers:
<?php
function random_float ($min,$max) {
return ($min+lcg_value()*(abs($max-$min)));
}
?>