살아가는 이야기

난수 발생 프로그램(C 언어) 본문

컴퓨터, 풀어그림

난수 발생 프로그램(C 언어)

우균 2013. 9. 11. 09:15

컴퓨터 시뮬레이션(simulation)을 할 때나 무작위로 테스트 데이터를 만들 때, 난수를 발생시켜야 하는 경우가 있다. 이런 경우를 대비해서 C 라이브러리에는 난수 발생 함수 rand()가 구비되어 있다. 물론 '진짜' 난수가 아니라 '사이비(pseudo)' 난수이긴 하지만 간단한 프로그램을 작성할 때는 매우 유용하다.

그런데 rand()를 이용하면 실행할 때마다 같은 난수 열이 발생된다. 따라서 srand()를 이용하여 난수의 시작점(seed)을 바꾸어 주어야 하는데, srand()의 인수를 다시 바꾸어 주어야 하는 문제가 발생한다. 이 때 사용할 수 있는 함수가 바로 time()이다. 간단히 말해서 다음과 같이 srand()를 호출한 후 rand()를 호출하면 실행할 때마다 다른 난수열이 발생된다.

srand((unsigned int)time(NULL));

간단한 샘플 프로그램을 보면 다음과 같다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int const num = 10;
    int i;

    srand((unsigned int)time(NULL));
    printf("rand()를 이용하여 %d 개의 난수를 발생시킵니다.\n", num);
    for (i = 0; i < num; ++i) {
        printf("\t%8d\n", rand());
    }

    return 0;
}

사실 같은 내용을 초판의 Playing with C에 적었지만, 분량을 줄여 달라는 출판사의 요청에 따라 아쉽게도 삭제되었다. 그래서 여기에 내용을 기록해 둔다.

 

Comments