먼저 rand 함수



선언 - stdlib.h


원형 - int rand(void);


설명 -


예측할 수 없는 하나의 수를 만들어 내며, 그 값의 범위는 0~32767


즉 리턴하는 값의 범위가 0~32767이다.


rand 함수는 seed를 이용한 난수발생 알고리즘을 쓴다고 한다.


그러니까 만약에 seed가 10인데 rand 함수를 써서 325라는 난수가 나왔다면


그 다음 rand 함수 호출시에는 325라는 이전 난수값을 이용해서 다시 난수를 발생시킨다


그러니까 seed값이 일정하다면 rand 함수 호출때마다 일정한 값들이 반복해서 나온다는 소리




그리고 srand 함수



선언 - stdlib.h


원형 - void srand(unsigned seed);


설명 - 


앞의 rand 함수만 가지고는 일정한 값들만 반복해서 나오는데,


srand함수로 초기 seed값을 설정해주면 이번에는 다른 값들이 나오는 것을 확인할 수 있다.


근데, rand 함수는 어차피 seed값을 가지고 난수를 발생시키기 때문에


일정한 seed값을 쓰게 되면 프로그램 실행시마다 정해진 패턴대로 난수값들이 정해진다.


(앞에서 1,17,102 가 반복해서 나왔다면 이번에는 8,41,77이 반복된다는 소리)


그래서 보통은 srand의 인자값에 프로그램 실행시마다 계속 바뀌는 값을 seed로 넣어주게 된다.


srand(time(NULL));


이런식으로 time(NULL)을 인자로 주는데, time함수는 현재시각을 초단위로 반환한다.


그래서 프로그램을 실행할때마다 srand함수의 인자값에 계속 변하는 값이 들어가는 것이다.


그리고 계속 변하는 값을 seed로 쓰기 때문에 프로그램 실행시마다 다른 난수들의 패턴을 발생시킬


수 있다.




time함수



선언 - time.h


원형 - time_t time(time_t * timer);


설명 -


현재 시간을 조사한다. time 함수가 조사하는 시간은 1970년 1월 1일 자정 이후부터 현재까지


경과한 초이다. time_t형은 time.h에 long형으로 선언되어 있다.


인자가 NULL일 때에는 조사한 시간을 반환해준다.



random 함수



선언 - stdlib.h


원형 - int random(int num);


설명 -


random함수는 stdlib.h에 다음과 같이 정의되어 있다.


#define random(num) (rand()%(num))


보통 rand함수를 사용해서 난수를 얻을 때 일정한 값의 범위를 얻기 위해서


rand()%100;


이런식으로 하면 0~99사이의 값만 얻을 수 있는데


random 함수는 그 역할을 대신해준다.


그러니까 rand()%100이나 random(100)이나 같다는 소리




randomize 함수



선언 - stdlib.h, time.h


원형 - void randomize(void);


설명 - 


randomize 함수는 stdlib.h에 다음과 같이 정의되어 있다.


#define randomize() srand((unsigned)time(NULL))


아까 seed의 값을 계속 바꿔주기 위해 srand의 인자로 time(NULL)을 전달한다고 했는데


randomize() 함수는 이 역할을 대신해준다.


그러니까 srand(time(NULL)) 이나 randomize()이나 같다는 소리




'C > 공개글' 카테고리의 다른 글

if(a==0) 와 if(0==a)의 차이?  (0) 2013.01.23
헤더파일의 디자인과 관련해서 주의할점  (0) 2013.01.23
gets와 fgets  (0) 2013.01.23
데이터를 정렬할 때 유의사항  (0) 2013.01.23
EOF와 feof함수의 특징  (3) 2013.01.23
Posted by huammmm1
,