현재 위치: > 최신 기사 목록> lcg_value () 및 mt_rand () : 어느 것이 당신에게 더 낫습니까?

lcg_value () 및 mt_rand () : 어느 것이 당신에게 더 낫습니까?

gitbox 2025-05-29

PHP에서 랜덤 숫자를 생성 할 때 두 가지 공통 함수는 lcg_value ()mt_rand () 입니다. 그들은 모두 임의의 숫자를 생성하는 데 사용될 수 있지만 특정 사용 시나리오, 성능, 무작위성 및 이식성에서 장점과 단점이 있습니다. 이 기사는이 두 기능을 자세히 비교하여 개발자가 필요에 따라 적절한 임의 번호 생성 체계를 선택할 수 있도록 도와줍니다.


1. 기본 소개

  • lcg_value ()
    이것은 선형 합동 발전기 (LCG, 선형 합동 발전기)를 기반으로 PHP에서 구현 된 무작위 생성 기능입니다. 부동 소수점 숫자가 필요한 시나리오에서 일반적으로 사용되는 0과 1 사이의 부동 소수점 번호를 반환합니다.

  • mt_rand ()
    PHP 내장 Mersenne Twister Random Number Generation 기능. 기본 범위는 0에서 mt_getrandmax () 의 정수를 생성하며, 이는 일반적으로 성능이 향상되고 강한 무작위성을 갖습니다.


2. 임의의 숫자 유형 및 범위

기능 반환 유형 기본 범위 설명
lcg_value () 뜨다 0.0 ≤ x <1.0 십진수 랜덤 숫자가 필요한 시나리오에 적합합니다
mt_rand () 정수 (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 이상에서 random_int () 또는 random_bytes () 와 같은 안전한 기능을 사용하는 것이 좋습니다.


5. 예제를 사용하십시오

lcg_value () 사용

 <?php
// 생성 a0그리고1사이의 부동 소수점 번호
$randomFloat = lcg_value();
echo "임의의 부동 소수점 번호: " . $randomFloat;
?>

mt_rand () 사용

 <?php
// 생성 a0그리고100사이의 정수
$randomInt = mt_rand(0, 100);
echo "임의의 정수: " . $randomInt;
?>

6. 해당 시나리오 요약

장면 권장 기능 설명
플로팅 포인트 랜덤 숫자가 필요합니다 lcg_value () 확률 계산과 같은 시나리오에 적합한 간단한 부동 소수점 번호 생성
고성능 정수 랜덤 숫자가 필요합니다 mt_rand () 대부분의 게임, 시뮬레이션 및 일반 임의의 요구 사항이 선호됩니다
암호화 적으로 안전한 임의의 숫자가 필요합니다 PHP 7+ 내장 보안 기능 random_int () 또는 random_bytes () 사용

7. 관련 정보

PHP Random Number 기능에 대한 자세한 내용은 공식 문서를 참조하십시오 : https://gitbox.net/manual/en/function.lcg-value.phphttps://gitbox.net/manual/function.mt-rand.phpp