PHPで乱数を生成する場合、2つの一般的な関数はLCG_VALUE()とMT_RAND()です。それらはすべて乱数を生成するために使用できますが、特定の使用シナリオ、パフォーマンス、ランダム性、および移植性には、利点と短所があります。この記事では、これら2つの機能を詳細に比較して、開発者がニーズに応じて適切な乱数生成スキームを選択できるようにします。
lcg_value()
これは、線形合同ジェネレーター(LCG、線形合同ジェネレーター)に基づいてPHPに実装される乱数生成関数です。これは、0〜1の間の浮動小数点数を返します。これは、通常、浮動小数点乱数が必要なシナリオで使用されます。
mt_rand()
PHPビルトインMersenne Twister乱数生成関数。整数を生成し、デフォルトの範囲は0〜MT_GetRandMax ()であり、通常はパフォーマンスが向上し、ランダム性が強くなります。
関数 | 返品タイプ | デフォルトの範囲 | 説明します |
---|---|---|---|
lcg_value() | フロート | 0.0≤x<1.0 | 10進乱数が必要なシナリオに適しています |
mt_rand() | integer(int) | 0からmt_getrandmax() | ランダムな整数生成に適したカスタマイズ可能な範囲 |
一般的に、 MT_RAND()は、アルゴリズムの最適化により、LCG_Value()よりも優れたパフォーマンスを発揮します。多数の乱数生成が生成されるシナリオでは、 mt_rand()がタスクをより速く完了することができます。
MT_RAND()アルゴリズムは、Mersenne Twisterに基づいており、最大2^19937-1の期間があり、迅速に生成されます。
LCG_VALUE()は、短い期間と速度が遅い線形合同アルゴリズムに基づいています。
乱数
Mersenne Twisterアルゴリズムはランダム性が向上し、ゲーム、シミュレーション、一般的なランダムニーズに適しています。
線形合同ジェネレーターはランダム性が低く、短期間と不均一な分布の問題があります。
セキュリティ<br> どちらも暗号的に安全な機会に適していません。
PHP 7以降では、ランダム_Int()やrandom_bytes()などのより安全な関数を使用することをお勧めします。
<?php
// aを生成します0そして1間の浮動小数点数
$randomFloat = lcg_value();
echo "ランダムフローティングポイント番号: " . $randomFloat;
?>
<?php
// aを生成します0そして100整数間
$randomInt = mt_rand(0, 100);
echo "ランダム整数: " . $randomInt;
?>
シーン | 推奨機能 | 説明します |
---|---|---|
浮動小数点乱数が必要です | lcg_value() | 確率計算などのシナリオに適した、単純な浮動小数点数生成 |
高性能整数乱数が必要です | mt_rand() | ほとんどのゲーム、シミュレーション、および通常のランダム要件が推奨されます |
暗号的に安全な乱数が必要です | PHP 7+ビルトインセキュリティ関数 | random_int()またはrandom_bytes()を使用します |
PHP乱数関数の詳細については、公式ドキュメントを参照してください: https://gitbox.net/manual/en/function.lcg-value.phpおよびhttps://gitbox.net/en/function.mt-rand.php