본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 5일 차 : 난수

안녕하세요 넬다이입니다.

 

오늘은 5일 차 속성 정리 시간이 돌아왔습니다.

 

오늘 정리할 주제는 난수입니다 보고 계시는 분들도 파이팅입니다.! ㅎ

 

오늘은 분량이 조금 적을 수도 있는데 뒤에 내용을 정리하는 겸 난수라는 것이 무엇인지 가지고 놀면서 테스트해보시면 좋을 거예요.ㅎ

 

저는 게임을 만드는 개발자인데 게임에서는 난수가 정말 중요하기 때문에 그냥 하루로 빼서 정리해봤어요 ㅎ 별 내용은 없지만요...


난수

난수란 무엇인가?
특정한 순서나 규칙이 없는 무작위의 숫자를 말합니다.
컴파일러에서 제공되는 난수 추출 함수가 rand 함수입니다. 
이 함수는 stdlib.h 에 정의되어 있으며 컴파일러마다 rand함수를 통해 구할 수 있는 난수의 최댓값은 다르다,

 

win32 기반, mvsc 9.0 버전에서는 0~32767 범위에 존재하는 난수를 반환한다.

 

 

#include <iostream>
#include <stdlib.h>

//시간값을 쓰려면 time.h를 포함해야 합니다.
#include <time.h>

void main()
{
	int	iRandom = 0;

	iRandom = rand();

	cout << iRandom << endl;
}

 

위에 출력물은 랜덤으로 iRandom의 값을 넣어주고 출력해주는 기능을 가지고 있다.

 

하지만 이 프로그램을 10번이고 100을 실행해도 같은 값이 나올 것이다. 그 이유는 

난수란 시드 표가 있어 시드 표에서 아무 숫자나 골라서 나오는 게 rand 함수인데
시드 값이 고정되어 있다면 난수가 도출될 확률을 예측할 수 있기 때문이다.

 

난수 값을 예측할 수 있는 상황이 되어 버린다.
즉 진정한 의미의 난수라고 볼 수 없게 되어서

srand(unsigned((time(NULL)));

이런 식으로 사용을 하면 시간 값에 따라서 시드 표가 교체되는 것임.
컴퓨터가 가진 시간 값을 가져와서 초마다 발생하는 값으로 시드를 변경 시겨 주는 것이다.

 

코드로 다시 본다면은

#include <iostream>
#include <stdlib.h>

//시간값을 쓰려면 time.h를 포함해야 합니다.
#include <time.h>

void main()
{
	int	iRandom = 0;

	//시드표를 시간으로 교체한다.
	srand(unsigned(time(NULL)));
	iRandom = rand();
	
	cout << iRandom << endl;
}

 

이렇게 코드를 작성하게 된다면은 위에 코드와 다르게

시간 값을 기준으로 시드 표를 구성을 하게 되어서

실행을 했을 때 매번 다른 값이 나오는 것을 확인할 수 있을 것이다.

 

[개발/C&C++] - (C/C++ 속성 정리) 4일 차 : 분기문 (숙제 있어요)

[개발/C&C++] - (C/C++ 속성 정리) 3일 차 : 연산자

[개발/C&C++] - (C/C++ 속성 정리) 2일 차 : 자료형 타입과 표현 범위 및 변수 선언

[개발/C&C++] - (C/C++ 속성 정리) 1일 차 : 주석, cout,cin은 무엇인가?