[완료]랜덤함수 생성하는 것 관련입니다

lang의 이미지

메인안에
srand((unsigned)time(0));
int i = rand();

이런 식으로 생성을 하면 시간변화에 따라 생성되는 것이 실행할때마다 달라지더라구요
정확한 동작방식은 모르지만 말입니다.

그런데 이것을 함수로 선언해서 int를 리턴하도록 저 두가지 문을 넣으니까
처음 실행 한번은 되지만 그 이후부터는 같은 값을 리턴합니다

int ranInt()
{
srand((unsigned)time(0));
return rand();
}
이런 식으로 하면 말이죠.
왜 변화가 생기는지 몰르겠네요. 정확히 srand함수가 어떤방식으로 된건지 설명해주실분 계신가요?
감사합니다.

SoftOn의 이미지

srand()는 처음에 한번 실행 하시고 아래와 같이 하세요

int ranInt()
{
  return rand();
}

제가 알기로는 srand 부른 후 일정 패턴으로 랜덤값을 생성하는데
srand 이후로 바로 rand 불러서 같은 값이 나오는 걸로 알고 있습니다.

physicon의 이미지

그 코드가... 그냥 rand()와 다른 점이 뭐죠?
제가 보기엔 똑같아 보이는데...

peecky의 이미지

static unsigned long next = 1;
 
int rand()
{
	next = next * 1103515245 + 12345;
	return (unsigned)(next/65536) % 32768;
}
 
void srand(unsigned seed)
{
	next = seed;
}

일반적인 rand()와 srand() 구현 예시입니다.

srand()는 rand()함수의 초기값을 결정해줍니다. 그래서 time()함수가 같은 값을 리턴하는 동안은 rand()도 같은 값을 리턴하게 된 것입니다.

lang의 이미지

이제 좀 이해되는것같습니다^^