Game Dev/Article

rand 함수의 올바른 사용

AKer 2008. 9. 9. 15:19
반응형

예전에 포스팅했던 방식으로 rand 함수를 사용하면 '일반적으로' 사용하던 범위가 생성되지 않는다. 예를들어 rand() % 1000은 [0, 999]의 범위를 지니는 반면 rand() * 1000 / RAND_MAX은 [0, 1000]의 범위를 가지게 된다. 또 rand()와 1000 혹은 더 큰 수를 곱할 때 오버플로우의 위험이 존재한다.

GPG에서 illlust님이 이러한 문제를 제기하였고, visco님이 rand 함수를 제대로 사용하는 방법을 올려주셨다. 해당 글의 원문은 다음과 같다.

아래 사이트에 나와있는 공식을 간단하게 요약하면 다음과 같다.

사용자 삽입 이미지

또 해당 사이트의 예제에도 나와있지만 이를 C++로 코딩하면 다음과 같다.

srand(time(NULL)); // Seed
int nRange = 1000; // Range what you want (ex : 1000, 10000)
int nGen = double(rand() / double((RAND_MAX + 1) / nRange));
반응형

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

Open Partner File  (0) 2008.09.24
Ogre Engine v1.6.0 설치하기 (VC 2008)  (0) 2008.09.10
Texture Blending  (0) 2008.09.08
Introducing DirectX 11  (0) 2008.08.17