95 – 난수 함수

난수 함수에 대해서는 여러곳에서 말들이 많아서 그런지 다들 그냥 들어봤다라고 해서 유명하다. rand 함수에 대해서 주로 그렇게 이야기를 하는데, 난수 함수를 쓰는데 있어서 주의해야 할 점이 있다.

기본적으로 난수를 만들기 위해서는 rand와 srand 함수를 사용하면 된다. rand함수는 0과 RAND_MAX 사이의 난수를 생성하고 srand는 해당되는 seed를 초기화 하기 때문에 rand함수가 생성하는 난수가 달라지게 된다.

  • 함수 이름 | 기능
  • rand | 난수를 생성한다.
  • srand | rand를 초기화한다.

가장 기본적인 예시부터 살펴보겠다. srand로 처음 seed를 정해서 생성한 다음, 난수를 생성해서 100으로 나눈 나머지를 출력해서 0~99까지 출력한다.

스크린샷 2017-05-06 오후 4.29.28스크린샷 2017-05-06 오후 4.31.31

여기서 보면 프로그램을 여러 번 실행해도 똑같은 난수를 계속 생성하는 것을 볼 수 있다. 즉, seed가 고정된 상태에서는 동일한 난수밖에 생성되지 않는다.

이를 해결하기 위해서는 시간과 연동을 해야 한다. 시스템 타이머는 클락 단위로 세세하게 처리되기 때문에 프로그램 실행 때마다 항상 다른 seed로 만들어 낼 수 있다. 그래서 seed값을 유용하게 만들어서 이용할 수 있고, 이렇게 하면 실행할 때마다 rand 함수가 전부 다른 난수를 생성하게 된다.

스크린샷 2017-05-06 오후 4.31.46스크린샷 2017-05-06 오후 4.32.02

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.