random_rand — std::rand

random_rand — std::rand (의사 난수)

std::rand[0, RAND_MAX] 범위의 의사 난수 정수 값을 반환해요. <cstdlib> 헤더에 있어요.

C 스타일의 전통적인 난수 생성 함수예요.

출처: cppreference

본문

// <cstdlib>
int rand();

std::rand()가 사용하는 의사 난수 생성기는 std::srand()로 시드(seeding)돼요. std::srand() 호출 전에 rand()를 쓰면, std::srand(1)로 시드된 것처럼 동작해요.

#include <cstdlib>
#include <iostream>

std::srand(42);          // 시드 설정
int r = std::rand();     // 난수
int r6 = std::rand() % 6 + 1;   // 1~6 주사위

std::srand()로 시드될 때마다 같은 시퀀스가 생성돼요. std::rand()는 같은 시드를 쓰면 똑같은 난수 열을 만들어 재현 가능해요.

특징

  • 결과 범위는 [0, RAND_MAX]. RAND_MAX는 구현에 따라 (INT_MAX 최소).
  • 보안에 부적합 — 암호학적 난수가 아님.
  • 시드는 srand로 한 번만 정하는 것이 일반적이에요. 매번 호출마다 시드하면 패턴이 생겨요.
  • 품질이 낮음 — 낮은 비트는 주기가 짧을 수 있어요(% n은 편향 가능).
// 현대적 대안: <random> 헤더
#include <random>
std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<int> dist(1, 6);
int r = dist(gen);   // 1~6 균등

대부분의 새 코드에서는 std::rand 대신 <random> 라이브러리(std::mt19937, std::uniform_int_distribution 등)를 사용하는 것이 권장돼요. rand는 레거시 호환과 단순한 난수가 필요할 때만 써요.

더 알아보기 (Learn more)

cppreference