std:: rand
|
헤더 파일에 정의됨
<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
참고 항목
|
(C++11)
|
범위 전체에 걸쳐 균일하게 분포된 정수 값을 생성함
(클래스 템플릿) |
|
의사 난수 생성기를 시드함
(함수) |
|
|
std::rand
가 생성할 수 있는 최대값
(매크로 상수) |
|
|
지정된 범위 내의 난수 정수를 생성함
(함수 템플릿) |
|
|
C documentation
for
rand
|
|