|
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
|