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는 레거시 호환과 단순한 난수가 필요할 때만 써요.