반응형
예전에 포스팅했던 방식으로 rand 함수를 사용하면 '일반적으로' 사용하던 범위가 생성되지 않는다. 예를들어 rand() % 1000은 [0, 999]의 범위를 지니는 반면 rand() * 1000 / RAND_MAX은 [0, 1000]의 범위를 가지게 된다. 또 rand()와 1000 혹은 더 큰 수를 곱할 때 오버플로우의 위험이 존재한다.
GPG에서 illlust님이 이러한 문제를 제기하였고, visco님이 rand 함수를 제대로 사용하는 방법을 올려주셨다. 해당 글의 원문은 다음과 같다.
- GPG 논의 : http://www.gpgstudy.com/forum/viewtopic.php?t=19568
- rand 함수의 올바른 사용 : http://members.cox.net/srice1/random/crandom.html
아래 사이트에 나와있는 공식을 간단하게 요약하면 다음과 같다.
또 해당 사이트의 예제에도 나와있지만 이를 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 |