c++

c++11 <random >

에브리피플 2015. 1. 6. 20:15

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;