C++ 난수 생성기

C++에서 난수 생성 방법을 인터랙티브 코드 예제와 함께 배워보세요. rand(), srand(), <random> library, std::uniform_int_distribution, std::mt19937을 자세히 설명해 보세요.

C++ 코드 편집기

C++에서 난수 생성 방법을 인터랙티브 코드 예제와 함께 배워보세요. rand(), srand(), <random> library, std::uniform_int_distribution, std::mt19937을 자세히 설명해 보세요.

#include <iostream>
#include <random>

int main() {
    int min = 1;
    int max = 100;
    int quantity = 5;

    // Modern C++ random number generation
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(min, max);

    std::cout << "Modern C++ random numbers:" << std::endl;
    for (int i = 0; i < quantity; i++) {
        int num = dis(gen);
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

출력

브라우저 미리보기이며 Java나 C++를 실행하지 않습니다. 암호화 용도로 적합하지 않습니다.

예시 미리보기

rand() 사용된 클래식 C++

전통적인 rand() 함수를 사용 <cstdlib> 해 무작위 정수를 생성하세요. 간단하고 널리 지원되지만, 무작위성 품질이 낮아 암호학 응용에는 적합하지 않습니다.

빠른 랜덤 번호가 필요하신가요?

코드를 작성하지 않고도 즉각적인 결과를 얻으려면 온라인 난수 생성기를 사용해 보세요.

오픈 난수 생성기

C++ 난수 생성 이해하기

rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.

rand() Function

rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.

<random> Library

<random> 이 라이브러리(C++11+)는 std::mt19937(Mersenne Twister), uniform_int_distribution 같은 다양한 분포, 그리고 rand()보다 더 나은 무작위성 품질을 가진 현대적인 난수 생성 기능을 제공합니다.

uniform_int_distribution

std::uniform_int_distribution은 균등 분포로 정수 범위에 대한 정밀한 제어를 제공합니다. 통계 응용, 시뮬레이션 및 정확한 범위 제어가 필요할 때 완벽합니다.

std::mt19937

rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.

일반적인 사용 사례

게임 및 시뮬레이션

rand() 또는 현대 라이브러리 내 루프와 시뮬레이션을 사용해 무작위 주사위 굴림, 카드 드로우, 절차적 생성, 게임 이벤트를 생성할 <random> 수 있습니다.

보안 및 암호학

rand()와 std::mt19937은 암호학적 생성기가 아닙니다. 보안 목적에는 문서로 확인된 암호 라이브러리나 운영체제 API를 사용하세요. std::random_device는 이식 가능한 보안 보장이 아닙니다.

고성능 컴퓨팅

<random> std::mt19937을 가진 현대 라이브러리는 HPC 및 과학 컴퓨팅 응용 분야에서 대량의 난수 생성에 뛰어난 성능을 제공합니다.

소프트웨어 테스트

무작위 테스트 데이터, 퍼즈 테스트 입력, 엣지 케이스를 생성하여 C++ 애플리케이션에서 견고한 코드 커버리지와 버그 탐지를 보장합니다.

C++ 난수 생성 작동 원리

rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.

rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.

std::random_device는 구현에 따라 결정적 엔진을 사용할 수도 있습니다. 모든 플랫폼에서 예측 불가능한 출력을 보장하지 않습니다.

실용 팁

🎯

New Code에서는 rand()를 피하세요

rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.

🔒

시드를 명시적으로 선택하기

고정 시드를 사용하면 같은 엔진의 수열을 재현합니다. C++ 엔진은 시스템 엔트로피로 자동 초기화되지 않으므로 필요하면 시드를 명시하세요.

⚡

적절한 배포판 사용

균일한 정수 범위는 std::uniform_int_distribution를 사용하세요. 부동소수점 숫자는 std::uniform_real_distribution를 사용하세요. 이로 인해 적절한 통계적 성질이 보장됩니다.

기술 사양

알고리즘

  • rand()의 알고리즘은 구현에 따라 다릅니다. C++11은 std::mt19937 같은 엔진과 분포를 분리하며, 분포에 기본 mt19937 엔진이 지정되어 있지는 않습니다.
  • 메르센 트위스터 (std::mt19937)
  • std::random_device는 구현에 따라 결정적 엔진을 사용할 수도 있습니다. 모든 플랫폼에서 예측 불가능한 출력을 보장하지 않습니다.

성능 특성

  • rand(): 빠르지만 무작위성 품질은 낮습니다
  • <random>: 빠르고 우수한 품질입니다
  • std::mt19937: Very fast for large quantities

자주 묻는 질문

어떤 C++ 방식을 다루나요?

srand()와 함께 사용하는 고전적인 rand(), 최신 <random> 라이브러리, std::uniform_int_distribution, 그리고 mt19937 엔진입니다.

예제를 직접 조정할 수 있나요?

네. 매개변수 패널에서 최솟값, 최댓값, 개수를 설정한 후 실행하면 결과를 확인할 수 있습니다.

현재 어떤 방식이 권장되나요?

명명된 분포와 엔진을 함께 사용하는 <random> 라이브러리가 권장됩니다. rand()는 기존 코드에는 남아 있지만 품질이 낮고 범위 처리에 함정이 있습니다.

생성기는 어떻게 시드하나요?

std::random_device는 구현에 따라 결정적 엔진을 사용할 수도 있습니다. 모든 플랫폼에서 예측 불가능한 출력을 보장하지 않습니다.

C++에서 rand()는 어떤 범위의 값을 반환하나요?

rand()는 0부터 RAND_MAX까지 양 끝을 포함해 반환합니다. Microsoft CRT는 32767을 사용합니다. 다른 플랫폼도 같은 상한이라고 가정하지 마세요.

rand()는 암호학적으로 안전한가요?

rand()와 std::mt19937은 암호학적 생성기가 아닙니다. 보안 목적에는 문서로 확인된 암호 라이브러리나 운영체제 API를 사용하세요. std::random_device는 이식 가능한 보안 보장이 아닙니다.

C++에서 난수 실수(float)는 어떻게 생성하나요?

std::mt19937을 원하는 구간(예: 0.0부터 1.0)으로 설정된 std::uniform_real_distribution과 결합한 다음 dist(generator)를 호출하세요. 결과는 하한값은 포함되지만 상한값은 제외되는 double입니다.

C++에서 rand()는 스레드 안전한가요?

rand()의 스레드 안전성은 구현에 따라 다릅니다. 스레드별 엔진을 쓰거나 공유 엔진의 접근을 동기화하세요.

C++ standard draft: rand / srand · C++ standard draft: random_device · C++ standard draft: uniform_int_distribution

참고 문헌 및 리소스