RAND(3)

이름
rand, srand - random 수 생성기.

사용법
#include <stdlib.h>

int rand(void);

void srand(unsigned int seed);

설명
rand() 함수는 0과 RAND_MAX사이의 pseudo-random 정수를 리턴한다.

srand() 함수는 인자를 rand()가 리턴하는 pseudo-random 정수의 새로운 연속된 수들을 위한 종자로 설정한다. 이들 연속된 수들은 같은 seed 값으로 srand()를 호출하여 반복된다.

만일 어떤 seed 값도 제공되지 않는다면, rand() 함수는 자동적으로 1 값으로 종자가 된다.

반환값
rand() 함수는 0과 RAND_MAX사이의 값을 반환한다. srand()는 어떤 값도 반환하지 않는다.

주의
Linux C 라이브러리의 rand()와 srand() 버전은 random()와 srandom()처럼 같은 random 수 생성기를 사용한다. 그래서 lower-order bit 들은 higher-order bit들 만큼 랜덤하다. 그러나, 예전 rand() 작동에서, lower-order bit들은 higher-order bit들보다 덜 랜덤했다.

Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1990 (1st ed, p. 207))에, 다음과 같은 주석이 있다:
    "If you want to generate a random integer between 1 and 10, you should always do it by

        j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

    and never by anything resembling

        j=1+((int) (1000000.0*rand()) % 10);

    (which uses lower-order bits)."

Random-number 생성은 매우 복잡한 주제이다. Numerical Recipes in C 책(위에 언급한)은 Chapter 7 (Random Numbers)에서 random-number 생성에 관한 실제적인 훌륭한 토론을 제공한다.

더 이론적인 토론을 원하면, 깊이 있게 많은 실제적인 이슈를 다루고 있는 Donald E. Knuth의 The Art of Computer Programming, volume 2 (Seminumerical Algorithms), 2nd 판의 Chapter 3 (Random Numbers)를 참고해라.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981.

호환
SVID 3, BSD 4.3, ISO 9899

관련 항목
random(3), srandom(3), initstate(3), setstate(3)

역자
정강훈 <skyeyes@soback.kornet.net>, 2001년 3월 9일