現在の位置: ホーム> 最新記事一覧> lcg_value()およびmt_rand():どちらがあなたにとって良いですか?

lcg_value()およびmt_rand():どちらがあなたにとって良いですか?

gitbox 2025-05-29

PHPで乱数を生成する場合、2つの一般的な関数はLCG_VALUE()MT_RAND()です。それらはすべて乱数を生成するために使用できますが、特定の使用シナリオ、パフォーマンス、ランダム性、および移植性には、利点と短所があります。この記事では、これら2つの機能を詳細に比較して、開発者がニーズに応じて適切な乱数生成スキームを選択できるようにします。


1。基本的な紹介

  • lcg_value()
    これは、線形合同ジェネレーター(LCG、線形合同ジェネレーター)に基づいてPHPに実装される乱数生成関数です。これは、0〜1の間の浮動小数点数を返します。これは、通常、浮動小数点乱数が必要なシナリオで使用されます。

  • mt_rand()
    PHPビルトインMersenne Twister乱数生成関数。整数を生成し、デフォルトの範囲は0〜MT_GetRandMax ()であり、通常はパフォーマンスが向上し、ランダム性が強くなります。


2。乱数の種類と範囲

関数返品タイプデフォルトの範囲説明します
lcg_value()フロート0.0≤x<1.0 10進乱数が必要なシナリオに適しています
mt_rand() integer(int) 0からmt_getrandmax()ランダムな整数生成に適したカスタマイズ可能な範囲

3。パフォーマンスの比較

一般的に、 MT_RAND()は、アルゴリズムの最適化により、LCG_Value()よりも優れたパフォーマンスを発揮します。多数の乱数生成が生成されるシナリオでは、 mt_rand()がタスクをより速く完了することができます。

  • MT_RAND()アルゴリズムは、Mersenne Twisterに基づいており、最大2^19937-1の期間があり、迅速に生成されます。

  • LCG_VALUE()は、短い期間と速度が遅い線形合同アルゴリズムに基づいています。


4。ランダム性とセキュリティ

  • 乱数
    Mersenne Twisterアルゴリズムはランダム性が向上し、ゲーム、シミュレーション、一般的なランダムニーズに適しています。
    線形合同ジェネレーターはランダム性が低く、短期間と不均一な分布の問題があります。

  • セキュリティ<br> どちらも暗号的に安全な機会に適していません。
    PHP 7以降では、ランダム_Int()random_bytes()などのより安全な関数を使用することをお勧めします。


5.例を使用してください

lcg_value()を使用します

<?php
// aを生成します0そして1間の浮動小数点数
$randomFloat = lcg_value();
echo "ランダムフローティングポイント番号: " . $randomFloat;
?>

mt_rand()を使用します

<?php
// aを生成します0そして100整数間
$randomInt = mt_rand(0, 100);
echo "ランダム整数: " . $randomInt;
?>

6。該当するシナリオの概要

シーン推奨機能説明します
浮動小数点乱数が必要ですlcg_value()確率計算などのシナリオに適した、単純な浮動小数点数生成
高性能整数乱数が必要ですmt_rand()ほとんどのゲーム、シミュレーション、および通常のランダム要件が推奨されます
暗号的に安全な乱数が必要ですPHP 7+ビルトインセキュリティ関数random_int()またはrandom_bytes()を使用します

7。関連情報

PHP乱数関数の詳細については、公式ドキュメントを参照してください: https://gitbox.net/manual/en/function.lcg-value.phpおよびhttps://gitbox.net/en/function.mt-rand.php