프로그래밍

 3198, 1/160 회원가입  로그인  
   luster11
   rand함수의 구현원리

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6397 [복사]


예전에 C,C++를 공부하다가

rand 함수를 만나게 되었습니다

이 함수가 은근히 용도도 다양하고 자주 쓰게 되는 함수더라고요

그런데 완벽한 rand함수는 없다는 말을 들어서 확률 구현할때 쓰다가 뭔가

(물론 지장을 줄 만큼 크진 않겠지만) 께름칙해서 구현 원리를 찾아보게 됐습니다

그래서 찾아보니 이런 소스가!


static long holdrand = 1L;
void srand(unsigned int seed)
{
  holdrand = (long) seed;
}

int rand()
{
  return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}



이게 rand 구현된 원문이라던데 이게 어떻게 rand넘버 생성이 가능한걸까요?

그리고 왜 0xffff 를 쓰지 않고 0x7fff를 쓸까요? 가용범위가 줄어드는거아닐까요?

확률상 좀더 고르게 숫자가 나오게 하는 알고리즘도 궁금하지만... 이건 수학자에게 맡기겠습니다

  Hit : 9343     Date : 2013/10/26 11:16



    
hch19860906 rand()함수는 확률론적으로 평등분포(egalitarian distribution)라는 분포함수에 따릅니다... 2013/11/21