C++

난수발생기

오즈마스터 2008. 5. 24. 23:59

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); 
}