난수 (random)
-> 순서나 규칙이 없는 무작위 수
->아이템 강화, 랜덤 박스, 크리티컬 확률 등
-> 확률이 적용되는 모든 것에 난수가 사용된다.
난수 추출 함수
-> rand()
-> rand함수를 사용하면 난수가 추출된다,
-> 단, 실행 할 때마다 같은 결과가 도출된다.
-> 위험한 상황이 발생할 수 있다.
난수 추출 시 같은 결과가 나오는 이유
-> 난수 추출 시 컴퓨터는 seed 값을 확인하여
-> 해당 seed 값에 있는 난수를 순차적으로 추출해준다.
-> 사용자가 seed 값을 변경하지 않을 경우 기본적으로 1의 값을 가진다.
-> 이로 인해 프로그램을 다시 실행할 경우에는 중복된 숫자가 보인다.
seed 변경
srand(시드값) -> srand(12);
단, 시드 값을 변경한다해도 고정된 숫자가 추출되는 것은 동일하다!
이를 해결하기 위해 프로그램을 실행할 때마다 시드 값을 변경해줄 필요가 있다.
중복되지 않는 seed값
시간
-> 하루 단위, 한달 단위, 일년 단위 등 기간이 정해지면 중복된 숫자가 나올 수 있다.
-> 이를 방지하기 위해 기간을 설정하지 않고 계속해서 누적해나가는 시간이 필요하다!
-> 누적해 나간다 라는 말은 기준 시간이 필요하다.
-> 1970년 1월 1일부터 시간을 누적하고 있다.
누적한 시간을 확인하는 함수
-> time(0)
-> 단, time함수를 사용하기 위해서는 #include <time.h> 추가가 필요하다.
srand(unsigned(time(NULL)));
rand함수가 추출해주는 범위
-> 0 ~ 32767까의 범위에서 추출해준다
srand 사용 시 주의 사항
-> srand를 이용하여 seed값을 변경하면 추출 순서가 초기화 된다.
-> srand는 main 함수에 최초 1회만 선언해주면 된다.
-> 만약 여러번 선언을 하게 되는 경우 seed 값의 초기화가 여러번 진행되어 문제가 발생할 수 있다.
'Programming > C++ Basic' 카테고리의 다른 글
C++ 지역 변수, 전역 변수, 정적 변수(static) (0) | 2020.08.24 |
---|---|
C++ 함수란? (0) | 2020.08.24 |
C++ 반복문(for, while, do ~ while), goto 문 (0) | 2020.08.19 |
C++ 분기문(if, else if, else, switch) (0) | 2020.08.19 |
C++ 형변환 (0) | 2020.08.18 |