걍 심심해서 테스트 해봤습니다. 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
Windows rand() 랜덤 비율  (2) 2012.02.14
ARM 명령어 공부  (5) 2012.01.27
BlockInput Function  (3) 2012.01.20
My BSOD  (2) 2012.01.08
Posted by Ezbeat