제가아직 잘 몰라서 그러는데 예제에는 time값을 srand에 넣고 그걸이용해서 rand를 돌리더라고요. 근데 이 srand가 계속 난수 시드 정할 수 있는게 time값이 계속 변하기때문인걸로 아는데 이처럼 계속 변하는 수 없을까요? 암니면 아무값이나 넣어도 원래 난수가 생성되는건가요?
srand 안 불러도 rand 는 불러짐. rand 는 아마도 계속 다른 값을 뱉어낼 것임. 다만 같은 시드를 쓰면 나오는 순서가 완전히 똑같은 순열만 나옴. 이해가 안되면 묻기 전에 실험을 해보시오.
========================================
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv)
{
srand(0); // 고정시드
//srand(time(NULL)); //
for (int i = 0; i < 10; i++)
{
printf("%d\n", rand());
}
return 0;
}
====================
뭘 오해하는지 알 것 같은데. 제대로 설명한다고 무슨소리인지 모를 듯 하니 그냥 퉁쳐서 설명.
- srand() 는 요상한 순열을 만든다고 보면 됨. 예컨대 0으로 설정하면 38, 7719, 21238, 2437, 8855, ... 1로 설정하면 41, 18467, 6334, 26500, 19169, ... 뭐 이따위 별 의미도 없는 숫자열이 컴퓨터 내부에 잔뜩 만들어 짐. time(NULL) 이면 실행할 시간의 값이 들어갈테니 매번 다른 순열이 만들어 지겠쥬?
- rand() 는 부를때마다 저렇게 만들어진 숫자열로부터 순서대로 숫자를 하나씩 뽑아옴. 그래서 rand() 부르면 (아마도) 매번 다른값이 나오겠지만 시드값이 같다면 항상 같은 순서대로 어떤 숫자들이 나오겠쥬?
뭐가 없냐고 묻지말고 본인 생각부터 말하슈. 그 외에 뭐가 있을거 같음? 뭐 생각하자면 무궁무진하겠지만 내 머리에서 나오는 방식들로는 아무 실용적 가치가 없을 것 같은데? 애초에 srand 시드값에 또 랜덤 값을 넣는다는 순환논리를 이야기 할 정도로 바보는 아니겠지...
무한히 난수를 뽑고 그수가 홀수인지 짝수인지 판별하는 도박 프로그램을 만들고 있습니다. 고정된 순열이 계속 나온다면 프로그램자체가 성립이 안되니 난수라는 문법을 사용해 보았는데 어떻게 쓰는지 통 모르겠어서 예제를 갖다 박았습니다. 저는 이제 막 조건문과 반복문을 배운 아마추어수준에도 못미치는 코드를 짜고 있기때문에 도무지 생각해봐도 어떤 수를 넣어야 되는지 모르겠습니다.