Game Dev/Article

rand 함수의 올바른 분포

AKer 2008. 7. 29. 18:28
반응형
원문 : http://www.gpgstudy.com/forum/viewtopic.php?t=19568



1. rand() % 1000
2. rand() * 1000 / RAND_MAX

위의 경우 1번 보다는 2번의 연산이 더 정확한 분포를 보여준다. 그 이유는 다음과 같다.
RAND_MAX가 32767이라고 할 때 나머지가 0~767인 것은 33개, 768~999인 것은 32개입니다.
그럼 나머지가 0~767인 것은 10,000,000/32768*33 = 10070번,
768~999인 것은 10,000,000/32768*32 = 9765번쯤 나온다고 예측할 수 있습니다.
따라서 Rand 함수를 이용하여 특정 범위의 수를 생성하려고 할 때 다음과 같이 프로그램을 작성해야 한다.
srand(time(NULL)); // Seed
int nRange = 1000; // Range what you want (ex : 1000, 10000)
int nGen = rand() * nRange / RAND_MAX;
반응형

'Game Dev > Article' 카테고리의 다른 글

정밀도가 높은 수행시간 측정  (0) 2008.08.07
Internal Reference Count  (0) 2008.08.06
가변 인수 전달  (0) 2008.07.22
Shell Command List  (0) 2008.07.22