|
음... 엄밀히 randseed 값이 어떤 테이블의 인덱스인건 아니죠.
그렇게 생각하면, 32비트 랜덤을 위해선 4294967296 개(*4byte) 의 배열이 필요한데
당연히 이런 구조는 아니구요 ^^
통계학에서 말하는 common distribution (모든 경우가 골고루 나오는 일반 분포)
가 이상적인 랜덤인데, 이를 위해 통계학자들이 적당히 수를 뒤집어 골고루 나올 수
있게끔 연구를 하고 있죠.
여기서 수를 뒤집는다는 말은... flipping 과 folding 같은 걸 의미하는데...
randseed 값을 얼마간 SHIFT 나 ROTATE 한다든지, 상 하위 바이트를 XOR 한다든지
하는 식으로 숫자를 뒤집는 방식이죠.
이런식으로 randseed 값을 매 번 바꾸게끔 되어 있고...
당연히 이 randseed 값은 random 함수 내부에 static하게 선언된 변수라고 보시면 되고,
해미님이 말씀하셨던 것 처럼 randomize() 함수는 time.h 를 include 하셔야 쓸 수 있고, 현재의 시간을 randseed 에다 더해, 규칙이 존재하는 random 함수에 노이즈를 제공하죠.
이런 시간을 더하는 방법 이외에도... 키보드가 스트록 되는 간격을 잰다든지 특정 포트에서 들어오는 IO의 값을 이용한다든지 하는 노이즈 생성법이 있습니다.
설명이 장황해졌군요.
|