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));
반응형