같은 수가 나오는 srand rand 어떻게 하나요.
같은 시간에 동시에 두개의 프로그램을 실행하면 같은 수가 나오나요?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main() {
int i, j, n, t, x=0, y=1;
struct timeval tv;
gettimeofday(&tv, NULL);
t=tv.tv_usec;
printf("%d\n",t);
srand(t);
x=rand();
x=x%32768;
y=rand();
y=y%32768;
n=x*32768+y;
for(i=0;i<40;i++) {
printf("%10d",n);
x=rand();
x=x%32768;
y=rand();
y=y%32768;
n=x*32768+y;
}
return 0;
}
위와 같이 하면 됩니다.
time(NULL) 자체가 초단위로 절사한 값을 돌려주기 때문에 문제가 되는 것이었습니다.
마이크로 초 까지의 값을 가져와서 srand를 시키면 같아질수가 없읍니다.
최소한 순차적으로 거의 같은 시간에 실행을 시켰을 때는 말이지요.
쓰레딩으로 여러개의 쓰레드를 뛰어 놓고서 다른 값을 가지기를 원한다면
다른 방법을 사용해야 할지도 모르겠습니다.
이때에도 마이크로 초 까지 가져온 값에 각 쓰레드 아이디를 더해서
srand에 인자값으로 주면 되겠군요. 음.....
위에서 두개의 난수를 구해서 붙여주는 이유는 비쥬얼 씨에서는 rand값이 15비트
값으로 돌아 오기 때문에 두개를 붙여서 30비트로 만들어 준 것입니다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
출력함수 선택에 대한 고민 (0) | 2012.02.25 |
---|---|
C 언어 에서 %e와 %g에 대해서 (0) | 2012.01.21 |
scanf_s 함수의 문제점 (0) | 2012.01.18 |
게임에서 사용할 키보드 입력 체크 (0) | 2012.01.18 |
비쥬얼 씨++ 64비트 정수사용법 (0) | 2012.01.18 |