C++ 난수 생성기
C++에서 난수 생성 방법을 인터랙티브 코드 예제와 함께 배워보세요. rand(), srand(), <random> library, std::uniform_int_distribution, std::mt19937을 자세히 설명해 보세요.
빠른 랜덤 번호가 필요하신가요?
코드를 작성하지 않고도 즉각적인 결과를 얻으려면 온라인 난수 생성기를 사용해 보세요.
C++ 코드 편집기
C++에서 난수 생성 방법을 인터랙티브 코드 예제와 함께 배워보세요. rand(), srand(), <random> library, std::uniform_int_distribution, std::mt19937을 자세히 설명해 보세요.
출력
시뮬레이션 출력 (서버에서 C++ 실행)
"실행 코드"를 클릭하면 예제 출력을 볼 수 있습니다
rand() 사용된 클래식 C++
전통적인 rand() 함수를 사용 <cstdlib> 해 무작위 정수를 생성하세요. 간단하고 널리 지원되지만, 무작위성 품질이 낮아 암호학 응용에는 적합하지 않습니다.
C++ 난수 생성 이해하기
C++는 C의 단순한 rand() 함수에서 C++11의 현대 라이브러리로 진화하여 난수를 생성하는 여러 방법을 제공합니다 <random> . 고전적인 rand()는 선형 합동 생성기(LCG)를 사용하며 srand()로 시드된 반면, 현대적 접근법은 Mersenne Twister 알고리즘을 사용하며 다양한 사용 사례에 맞는 다양한 분배 클래스를 제공합니다.
rand() Function
고전적인 rand() 함수는 <cstdlib> 간단한 의사 난수 생성을 제공합니다. srand()를 시딩하여 선형 합동 생성기(LCG) 알고리즘을 사용합니다. 기본 응용에는 적합하지만 암호학 목적에는 적합하지 않습니다.
<random> Library
<random> 이 라이브러리(C++11+)는 std::mt19937(Mersenne Twister), uniform_int_distribution 같은 다양한 분포, 그리고 rand()보다 더 나은 무작위성 품질을 가진 현대적인 난수 생성 기능을 제공합니다.
uniform_int_distribution
std::uniform_int_distribution은 균등 분포로 정수 범위에 대한 정밀한 제어를 제공합니다. 통계 응용, 시뮬레이션 및 정확한 범위 제어가 필요할 때 완벽합니다.
std::mt19937
std::mt19937은 메르센 트위스터 알고리즘을 구현하여 우수한 통계적 특성과 매우 긴 주기(2^19937-1)를 제공합니다. 대부분의 <random> 분포의 기본 엔진입니다.
일반적인 사용 사례
게임 및 시뮬레이션
rand() 또는 현대 라이브러리 내 루프와 시뮬레이션을 사용해 무작위 주사위 굴림, 카드 드로우, 절차적 생성, 게임 이벤트를 생성할 <random> 수 있습니다.
보안 및 암호학
보안 용도에서는 특수 암호 라이브러리 사용을 고려하세요. 표준 rand()는 암호학적으로 안전하지 않습니다. 비밀번호와 토큰을 위해 플랫폼별 보안 난수 생성기를 사용하세요.
고성능 컴퓨팅
<random> std::mt19937을 가진 현대 라이브러리는 HPC 및 과학 컴퓨팅 응용 분야에서 대량의 난수 생성에 뛰어난 성능을 제공합니다.
소프트웨어 테스트
무작위 테스트 데이터, 퍼즈 테스트 입력, 엣지 케이스를 생성하여 C++ 애플리케이션에서 견고한 코드 커버리지와 버그 탐지를 보장합니다.
C++ 난수 생성 작동 원리
C++의 고전적인 rand() 함수(from next = (a * current + c) % m. 이 시퀀스는 결정적이며, srand())로 시딩되어야 합니다.
현대의 라이브러리(C++11+)는 Mersenne Twister 알고리즘(std::mt19937)을 사용하여 훨씬 우수한 무작위성 품질과 통계적 특성을 제공합니다. 또한 다양한 용도에 맞는 uniform_int_distribution, normal_distribution, bernoulli_distribution 등 다양한 배포 클래스도 제공합니다.
std::random_device는 무작위 수 엔진을 시딩할 수 있는 플랫폼별 엔트로피 소스를 제공하여 프로그램 실행 시 서로 다른 수열을 보장합니다.
C++ 무작위 생성에 대한 전문가 팁
New Code에서는 rand()를 피하세요
새로운 C++ 코드(C++11 이후)에서는
항상 씨드 스란드()
rand(를 사용할 경우, 프로그램 시작 시 항상 srand(std::time(0))를 호출해 생성기를 시딩하세요. 그렇지 않으면 매번 같은 순서가 나오게 됩니다. 와 함께
적절한 배포판 사용
균일한 정수 범위는 std::uniform_int_distribution를 사용하세요. 부동소수점 숫자는 std::uniform_real_distribution를 사용하세요. 이로 인해 적절한 통계적 성질이 보장됩니다.
기술 사양
알고리즘
- 선형 합동 생성자 (랜드 함수)
- 메르센 트위스터 (std::mt19937)
- 플랫폼별 엔트로피 소스 (표준::random_device)
성능 특성
- rand(): 빠르지만 무작위성 품질은 낮습니다
- <random>: 빠르고 우수한 품질입니다
- std::mt19937: Very fast for large quantities