Namespaces
Variants

std:: rand

From cppreference.net
헤더 파일에 정의됨 <cstdlib>
int rand ( ) ;

범위 [ 0 , RAND_MAX ] 에서 의사 난수 정수 값을 반환합니다.

std::srand() rand() 에서 사용되는 의사 난수 생성기를 시드합니다. 만약 rand() std::srand() 호출 전에 사용되면, rand() 는 마치 std:: srand ( 1 ) 로 시드된 것처럼 동작합니다.

rand() std::srand() 로 시드될 때마다, 연속적인 호출에서 동일한 값들의 시퀀스를 생성해야 합니다.

표준 라이브러리의 다른 함수들은 rand 를 호출할 수 있습니다. 어떤 함수들이 이를 호출하는지는 구현에 따라 정의됩니다.

rand() 가 스레드 안전한지 여부는 구현에 따라 정의됩니다.

목차

반환값

0 RAND_MAX 사이의 의사 난수 정수 값.

참고 사항

생성되는 난수 시퀀스의 품질에 대한 보장은 없습니다. 과거에는 rand() 의 일부 구현체들이 생성된 시퀀스의 무작위성, 분포, 주기 측면에서 심각한 결함을 보였습니다 (잘 알려진 사례에서, 최하위 비트가 호출마다 단순히 1 0 을 번갈아 나타내는 경우가 있었습니다).

rand() 는 중요한 난수 생성 요구 사항에는 권장되지 않습니다. C++11의 난수 생성 기능을 사용하여 rand() 를 대체하는 것이 권장됩니다. (C++11부터)

예제

아래 bounded_rand() 함수는 Debiased Modulo (Once) 의 수정된 버전입니다.

#include <cstdlib>
#include <ctime>
#include <initializer_list>
#include <iostream>
unsigned bounded_rand(unsigned range)
{
    for (unsigned x, r;;)
        if (x = rand(), r = x % range, x - r <= -range)
            return r;
}
int main() 
{
    std::srand(std::time({})); // use current time as seed for random generator
    const int random_value = std::rand();
    std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << '\n';
    for (const unsigned sides : {2, 4, 6, 8})
    {
        std::cout << "Roll " << sides << "-sided die 8 times: ";
        for (int n = 8; n; --n)
            std::cout << 1 + bounded_rand(sides) << ' ';
        std::cout << '\n';
    }
}

가능한 출력:

Random value on [0, 2147483647]: 948298199
Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 
Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 
Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 
Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2

참고 항목

범위 전체에 걸쳐 균일하게 분포된 정수 값을 생성함
(클래스 템플릿)
의사 난수 생성기를 시드함
(함수)
std::rand 가 생성할 수 있는 최대값
(매크로 상수)
지정된 범위 내의 난수 정수를 생성함
(함수 템플릿)