c++11 <random >
printf("random\n");
std::mt19937 mtRand;
// 64bit std::mt19937_64
for ( int i = 0; i < 7; i++ )
{
std::cout<<"mtrand : "<<mtRand()<<std::endl;
}
// make seed value
std::mt19937 mtRand2(1000);
for ( int i = 0; i < 7; i++ )
{
std::cout<<"make seed value "<<mtRand2()<<std::endl;
}
// 현재시간으로 난수 생성
auto curTime = std::chrono::system_clock::now();
auto duration = curTime.time_since_epoch();
auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
std::mt19937 mtRand3(millis);
for ( int i = 0; i < 7; i++ )
{
std::cout<<"currentTime :"<<mtRand3()<<std::endl;
}
// 예측 불가능한 난수 생성
std::random_device rng;
for( int i = 0; i < 7; i++ )
{
auto result = rng();
std::cout<<"random_device: "<<result<<std::endl;
}
//// 범위안 난수 생성
std::mt19937_64 rng1(3244);
std::uniform_int_distribution<long long> dist1(-3, 3);
for ( int i = 0; i < 7; i++ )
{
std::cout<<"범위안 난수 생성: "<<dist1(rng1)<<std::endl;
}
//// 0.0 ~ 1.0 난수 생성
std::mt19937_64 rng2;
std::uniform_real_distribution<double> dist2(0.0, 1.0);
for ( int i = 0; i < 7; i++ )
{
std::cout<<"실수형 범위안 난수 생성: "<<dist2(rng2)<<std::endl;
}
// 일정 확률로 난수생성
std::mt19937_64 rng3(3244);
std::bernoulli_distribution dist3(0.7); // 70퍼 확률
int success = 0;
int fail = 0;
for ( int i = 0; i < 100; i++ )
{
bool result = dist3(rng3);
if ( result )
success++;
else
fail++;
}
std::cout<<"성공 횟수: "<<success<<", "<<"실패 횟수: "<<fail<<std::endl;
// 성공 횟수 확률 구하기
std::mt19937_64 rng4(3244);
std::binomial_distribution<> dist5(1000, 0.3);
int result = dist5(rng4);
std::cout<<result<<std::endl;