C 에 있는 난수 발생 함수는 seed 에 따라 값이 고정적이다. seed 에 시간 인자를 넣어준다 하더라도 빠른 루프문일 때는 똑같은 seed 가 들어갈 수 밖에 없다.
그래서, seed 인자에 이전 난수와 인덱스를 넣어주면 어느 정도 분포가 골고루 돌아간다.
진정한 난수발생기는 이 세상에 없다는 말이 실감난다.
void main()
{
int nOdd = 0;
int nEven = 0;
int nSeed = 0;
int nNone = 0;
int r = 0;
for(int i=0; i<100000; ++i)
{
nSeed = (unsigned int)time(NULL) + r + i;
srand(nSeed);
r = rand();
int a = r % 3;
if(a == 0)
{
nEven++;
}
else if(a == 1)
{
nOdd++;
}
else
{
nNone++;
}
}
printf("Odd:%d, Even:%d, None:%d\n", nOdd, nEven, nNone);
}