c++ 수업 일지

캐모마일·2024년 3월 11일

수업일지

목록 보기
5/9

iostream만 가져왔는데 다른건 왜 써지지?

우선 우리가 쓰는 iostream은 입출력을 도와주는 라이브러리이다.
근데 이상한 점이 있다.
우리가 rand, time같은 함수를 다른 라이브러리 호출 없이 쓸 수 있다는 것이다.
그 이유를 알고 있는가 ? ????
cpp의 iostream 내부에는, stdlib, ctime같은 라이브러리가 존재하기 떄문이다!
(이렇게 말이죠)

rand 함수로 난수를 뽑아보자

난수란 일정한 범위 내에서 아무런 수나 꺼내 온 것이다
하지만 컴퓨터에게 아무거나 가져와! 라고 하면 컴퓨터는 수행할 수 없다.
그래서 rand는 주어진 seed에 맞는 seed 테이블의 숫자를 가져오는데

rand의 seed가 1일 때 rand함수를 n번 실행하면, 41, 6334, 26500, 19169,, .... 가 실행 할 때마다 나온다.

문제점

생각해보자, 실행 할 때마다 같은 값이 나오면 사용자는 값을 예측 할 수 있게 된다.
이를 해결하기 위해서는 srand라는 함수로 rand함수의 seed를 바꿀 수 있는데
srand(10230) 이런식으로 숫자를 넣으면 rand함수가 10230 seed 테이블을 가져온다.
하지만 아직 문제가 있다.

seed의 값이 바뀌지 않는다는것

seed를 바꾸려면 무엇을 해야할까??

해결법

바로 time()이다, time(0)을 실행하면 약 2n년
1970년 1월 1일 00:00:00부터의 시간을 초로 환산한 현재 시간을 반환한다.

이를 이용하면 위의 문제를 해결할 수 있다.

srand(time(NULL)) 보다는

time의 반환값을 보면 int64가 나온다.
srand 함수는 unsigned int를 받는 함수기 때문에
unsigned int(time(NULL))로 써주는게 좋을 것이다

0개의 댓글