srand는 난수를 뽑아내는게 아니고 Seed값을 던져주는 겁니다.
srand함수를 사용하지 않고 rand함수를 호출하면 주기적으로 같은 패턴이 등장하게되어 사실상 난수라고 말하기 어렵게 되죠.
그렇기때문에 time()등의 시드값을 던져서 좀더 난수에 가깝게 만든겁니다.
사실 그렇다고 해도 동일 패턴의 반복이라던지는 피하기 어렵지만요.
2006.09.25 20:13:55 (*.59.78.10)
Excelsis
랜덤은 실제로 완전히 랜덤한 값을 만들어내는게 아니구요, 랜덤한 값들을 이미 어딘가에 대충 표로 만들어놓고 있다가 사용합니다.
4 55 12 94 33245 6674 442... 뭐 이렇게 해괴하게 죽 이어지는 숫자들을 배열해놨다가, 몇번째 수부터 순서대로 쓴다 이런식으로 쓰는겁니다.
근데 srand는 이 '몇번째꺼부터 쓴다' 라는 그걸 지정해주는거구요. rand는 다음번에 나와야 할 수를 뽑아오는 함수입니다.
위의 모양대로 난수표가 되어있을 경우, srand 안해주고 rand() 뽑으면 똑같은 순서로 숫자 나올겁니다.
2006.09.25 21:18:41 (*.187.254.196)
진마
보충하자면, 위의 테이블 방식은 예전이나, 성능이 떨어지는 머신(모바일같은)에서 사용하는 방식이고 일반적인 PC의 컴파일러에서는 공식(의도적인 오버플로우를 일으키기 때문에 예측불허)을 사용합니다.
검색사이트에서 찾으면 그 공식도 나오는데..... 상수를 두고 특정 공식을 계속 적응시켜서 사용합니다.
a = 공식A(a); //이런식으로...
srand로 넣어주는 값은 저 시작하는 a의 값을 지정해주는것입니다.
2006.09.25 21:21:54 (*.131.94.237)
유상용
아 개념이 잡혀가네요 ㅎㅎ
나머진 직접 코딩해가면서 알아봐야겠어요 ㅋ
지금 가위바위보 만들기를 하고있어서 -ㅂ- 다시 버닝!
2006.09.26 13:45:32 (*.102.122.211)
안군
참고로, srand에서 시드 값을 같은 걸로 주면, 항상 같은 패턴으로 rand 값이 나옵니다. 이걸 이용해서 네트워크 게임 등을 만들때 양쪽의 동기화를 맞춘다거나(메시지 교환 없이), 암호화의 키로 쓴다거나.. 하는 방법도 있지만, 워낙 잘 알려진 방법이라 그리 많이 쓰지는 않아요~
srand함수를 사용하지 않고 rand함수를 호출하면 주기적으로 같은 패턴이 등장하게되어 사실상 난수라고 말하기 어렵게 되죠.
그렇기때문에 time()등의 시드값을 던져서 좀더 난수에 가깝게 만든겁니다.
사실 그렇다고 해도 동일 패턴의 반복이라던지는 피하기 어렵지만요.