오늘은 랜덤함수에 대해 간단히 알아보고자 합니다.


일반적으로 사용하는 랜덤함수는 부정확합니다. 완전히 랜던값을 보장하다고 할수도없구요.


C++ 11버전(?) 이후 부터 사용할수잇는 방법이긴하지만 알아보도록하겠습니다.




하드웨어적인 방법을 이용한 진정한 랜덤함수


#include <random>  // 추가해야하는 헤더파일


int main()

{

std::random_device rrandom;


cout << rrandom() << endl;


return 0;

}



실행화면

3295284912



특정 범위내의 랜덤함수



#include <random>  // 추가해야하는 헤더파일


int main()

{

std::random_device rrandom;


mt19937_64 rand(rrandom());// 랜덤함수로 시디 값을 넣어준다.


uniform_int_distribution<__int64> dist(0, 65555);    // 0부터 65555까지의 값을 가진다.



cout << " dist()의 최소,최대 = "<< dist.min() << ", "<< dist.max() << endl;

count << dist(rrandom) << endl;


return 0;

}



실행화면


dist()의 최소,최대 = 0, 65555

32141






'C & C++' 카테고리의 다른 글

float 연산에서 주의사항  (0) 2014.12.19

float 연산에서의 주의사항


float를 와 int를 연산할때 발생하는 오류 및 주의사항입니다.

알고잇는 항목이지만 코딩을 할때 의외로 실수를 많이 할수있는 사항이라 주의해야합니다.


int64_t = (int64_t)( int64_t+ float); —> 결과가 이상할수있다.

int64_t = ( int64_t+ (int64_t)(float); —> 결과가 정상입니다.

 

더하기 연산뿐 아니라 곱하기 연산등에도 모두 포함됩니다.

float는 float끼리 연산을 하고 전체 결과에 형변환을 하는것이 좋습니다.

 

예시

int64_t aaaa = 11111111111111;
float bbbb = 2222;
int64_t cccc = (int64_t)( aaaa + bbbb );
int64_t dddd = cccc + (int64_t)bbbb;

cccc = 11111111131111; 2222가 더해져야하는데 30000~40000이 더해집니다.
dddd = 11111111113333; 정상

'C & C++' 카테고리의 다른 글

하드웨어적인 방법을 이용한 진정한 랜덤함수  (0) 2015.08.27

+ Recent posts