728x90
반응형
C 스타일의 난수 생성하기
srand 함수를 사용하여 랜덤 시드를 구하고, 그 시드 값을 time 함수를 사용하여 현재 시간을 기준으로 하여
고정된 값이 아닌, 계속 변화하는 값을 넣어 난수를 생성한다.
단점은 시드값이 너무 천천히 변한다는 점과, 랜덤값을 균등하게 생성하지 않는다는 점이다.
그리고, 결론적으로 rand() 함수 자체도 그다지 뛰어나지 않은 함수라 웬만하면 C++을 사용하자.
생성될 난수에 최대 범위로 나눈 값을 +1 해주면 1~범위 까지의 값을 추출해 낼 수 있다.
#include <iostream>
#include <time.h>
using namespace std;
int main() {
// 시간을 기준으로 시드값 설정
srand(static_cast<unsigned int>(time(nullptr)));
// rand() 함수로 나온 난수에 10를 나누면 0~9의 값이 나오는데, +1을 하여 1~10으로 만듦
int randValue = (rand() % 10) + 1;
}
C++ 스타일의 난수 생성하기
난수를 생성해주는 random 헤더파일을 사용하여 구한다.
#include <iostream>
#include <random>
using namespace std;
int main() {
// 랜럼 시드값을 얻기 위한 random_device 설정
random_device rand;
// random_device 를 통해 난수 생성 엔진을 초기화 한다.
// 원하는 시드 값을 넣고 싶다면, 그냥 시드 값을 하드코딩 하면 됨. (ex. gen(1234))
mt19937 gen(rand());
// 1 ~ 50 까지 균등하게 나타나는 난수열을 생성하기 위해 균등 분포 정의.
uniform_int_distribution<int> randValue(1, 50);
}
728x90
반응형
'📕Programming > 📝C/C++' 카테고리의 다른 글
[C / C++] 인라인 함수 (inline function) (0) | 2023.12.28 |
---|---|
[C / C++] algorithm 라이브러리 (0) | 2023.11.24 |
[C / C++] 객체 지향 - 상속성, 은닉성, 다형성 (0) | 2023.09.27 |
[C / C++] 문자열 (0) | 2023.09.14 |
[C / C++] 포인터 (pointer) (0) | 2023.09.12 |