rand
|
헤더 파일에 정의됨
<stdlib.h>
|
||
|
int
rand
(
)
;
|
||
0
과
RAND_MAX
사이의 의사 난수 정수 값을 반환합니다
(
0
과
RAND_MAX
포함).
srand()
는
rand()
에서 사용되는 의사 난수 생성기를 시드합니다.
만약
srand()
를 호출하기 전에
rand()
를 사용하면,
rand()
는
srand
(
1
)
로 시드된 것처럼 동작합니다.
srand()
로
rand()
를 시드할 때마다 동일한 값의 시퀀스를 생성해야 합니다.
rand()
는 스레드 안전성이 보장되지 않습니다.
목차 |
매개변수
(없음)
반환값
0 과 RAND_MAX 사이의 의사 난수 정수 값(양쪽 포함).
참고 사항
생성되는 난수 시퀀스의 품질에 대한 보장은 없습니다.
과거에는 일부
rand()
구현체에서 생성된 시퀀스의 무작위성, 분포 및 주기에 심각한 결함이 있었습니다(잘 알려진 사례 중 하나에서는 최하위 비트가 호출 간에 단순히
1
과
0
을 번갈아 나타났습니다).
rand()
는 암호학과 같은 중요한 난수 생성 요구 사항에는 권장되지 않습니다.
POSIX에서는
rand
가 사용하는 의사 난수 생성기의 주기가 최소
2
32
이상이어야 합니다.
POSIX는 스레드 안전 버전의 rand를 제공했으며, 이를
rand_r
라고 불렀습니다. 이는 현재
drand48
함수군을 선호하여 더 이상 사용되지 않습니다.
예제
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); // 현재 시간을 난수 생성기 시드로 사용 int random_variable = rand(); printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable); // 6면 주사위를 20번 굴림 for (int n=0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + rand()/((RAND_MAX + 1u)/6); // 참고: 1+rand()%6은 편향됨 printf("%d ", x); } }
가능한 출력:
Random value on [0,2147483647]: 448749574 3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1
참고문헌
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.22.2.1 rand 함수 (p: 252)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.22.2.1 rand 함수 (p: 346)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.20.2.1 rand 함수 (p: 312)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.10.2.1 rand 함수
참고 항목
|
의사 난수 생성기 시드 설정
(함수) |
|
|
rand
(
)
함수가 생성 가능한 최댓값
(매크로 상수) |
|
|
C++ documentation
for
rand
|
|