본문 바로가기

My Study/Programming&Theory

Windows rand() 랜덤 비율

걍 심심해서 테스트 해봤습니다. Windows에서 Visual Studio를 설치하고 srand와 rand함수를 사용해 랜덤 값을 뽑아내면 얼마나 랜덤할 수 있는지...;;

srand() 함수


rand() 함수


Visual Studio 2010/2008 기준으로 이와 같이 정의가 되어 있습니다.
( 그 하위 버전은 확인 못함.. )

최소 값은 0x0000, 최대 값은 0x7fff 가 되겠군요.

아래는 테스트 코드입니다. srand의 인자로 얼마나 랜덤 적이고 동적인 값을 넣어야 하는게 관건인듯 싶은데..
걍 전 rdtsc를 사용해 넣어봤습니다. ( time()이나 GetTickCount() 함수들 보단 동적이므로.. ㅎㅎ )

한번 실행마다 10억 번의 rand를 뽑아내 그 빈도를 조사해보았습니다.
가장 많이 나온 숫자의 횟수와 가장 적게 나온 숫자의 횟수를 조사해 %로 알아보았습니다.

여러번의 실행을 해보았습니다.

Max: 31308/1000000000   0.003131%
Min: 29715/1000000000    0.002971%

Max: 31267/1000000000   0.003127%
Min: 29783/1000000000    0.002978%

Max: 31222/1000000000   0.003122%
Min: 29809/1000000000    0.002981%

Max: 31343/1000000000   0.003134%
Min: 29782/1000000000    0.002978%

Max: 31234/1000000000   0.003123%
Min: 29743/1000000000    0.002974%  

Max: 31258/1000000000   0.003126%
Min: 29701/1000000000    0.002970%

Max: 31209/1000000000   0.003121%
Min: 29777/1000000000    0.002978% 


정확히 100%를 32767로 나누면  0.00305185% 쯤 나오는데
기준 %를 기점으로 대략 ±0.0001% 밖에 벗어나질 않는군요.

결론 : 골고루 랜덤한 값이 나옵니다 -_-;; 이상 뻘짓.............. 흑흑.. 

'My Study > Programming&Theory' 카테고리의 다른 글

ELF 파일의 PLT, GOT  (3) 2012.04.26
Calling Convention Process for AMD 64 Bit  (4) 2012.04.02
ARM 명령어 공부  (6) 2012.01.27
BlockInput Function  (3) 2012.01.20
My BSOD  (2) 2012.01.08