2008.10.05 23:37

[TR1 살펴보기] 1. Random

Lyn
조회 수 38495 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
참고사이트
http://www.boost.org/doc/libs/1_36_0/libs/random/index.html

예제소스
#include <iostream>
#include <random>
#include <windows.h>

using namespace std;
using namespace std::tr1;

void main()
{
    mt19937 Generator; //난수엔진
    uniform_int<> dst(100, 500); //범위지정자
    Generator.seed(GetTickCount());  //seed 초기화
    variate_generator<mt19937, uniform_int<> > rand(Generator, dst); //난수생성기

    for( int i = 0;i < 1000; ++i )
    {
       cout << rand() << endl;   //난수생성기는 () 연산자를 난수생성 연산자로 오버로딩 해 놓았습니다.
    }
}

TR1의 난수생성기는 3개의 요소로 이루어집니다.
1. 난수엔진
2. 범위지정자
3. 난수생성기

난수 엔진은 여러가지가 있으며,  대충 아래와같습니다.

정수난수엔진

minstd_rand
rand48
lrand48 (C 기본 라이브러리와 같음)
ecuyer1988
kreutzer1986
hellekalek1995
mt11213b
mt19937(C++0X 기본  난수엔진)

실수난수엔진 (전부 lagged_fibonacci 시리즈군요)
lagged_fibonacci607
lagged_fibonacci1279
lagged_fibonacci2281
lagged_fibonacci3217
lagged_fibonacci4423
lagged_fibonacci9689
lagged_fibonacci19937
lagged_fibonacci23209
lagged_fibonacci44497

아래로 갈 수록 랜덤의 성능이 좋아지지만, 메모리소모가 커지고 속도가 느려집니다.

만약 _HAS_CPP0X_ 매크로가 정의되어있다면,
mt19937엔진은 default_random_engine 라는 이름으로 typedef 됩니다.

Ps1. C++0X 표준에서는 variate_generator<mt19937, uniform_int<>> 처럼 템플릿의 >>를 붙여쓰는것을 허용합니다.
하지만 C++0X이전의 컴파일러에서는 >>를 시프트 연산자로 인식하여 오류를 내니 주의.
VS2008 Sp1은 >>를 정상적으로 템플릿으로 인식하며 CB2009는 오류를 냅니다.

Ps2. 위의 코드는 C++Builder 2009에서 제대로 실행되지 않습니다.
코드엔 이상이 없어 보이는데... 이상하게 Devide by Zero 익셉션을 뱉네요 ㅡ.ㅡ; 구현상의 버그인듯

Ps3. 위의 코드는 VS2008 SP1에서는 치명적인 오류를 가집니다. mt19937 엔진이 범위 밖의 숫자를 뱉어냅니다. 고쳐지기전까지 쓰지마세요(보이드소프트의 김호광님 감사합니다)
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
» [TR1 살펴보기] 1. Random Lyn 2008.10.05 38495
137 대기하는 쓰래드 모두 깨우기 (Java의 notifyAll) Lyn 2012.09.04 38096
136 Boost 에서 자기 자신의 shared_ptr 리턴하기 file Lyn 2010.03.02 38018
135 [TR1 살펴보기] 2. Array Lyn 2008.10.05 37738
134 Mysql 툴 Lyn 2011.03.31 37597
133 [개인자료] 프로그램 만들때 무조건 해야하는것.. Lyn 2011.01.26 37286
132 [Boost 살펴보기] 1. pool file Lyn 2009.05.11 37259
131 컨테이너가 파괴될 때 소유한 객체 자동으로 파괴하기 Lyn 2008.10.22 36911
130 [Boost 살펴보기] 2. any Lyn 2009.05.11 36891
129 [Boost 살펴보기] 4. multi_array Lyn 2009.05.11 36887
128 [TR1 살펴보기] 3. UnOrdered Containers Lyn 2008.10.05 35782
127 MS가 C++AMP 를 clang+llvm 기반으로 포팅했네요. Lyn 2013.11.13 35734
126 C++11 표준 라이브러리 확장 (cbegin, cend) Lyn 2012.10.04 34619
125 [잡설] 앱스토어의 유행. 프로그래머에겐 과연? Lyn 2010.02.19 34488
124 C Runtime Library Exception Dump 남기기 첫번째방법 Lyn 2013.06.11 33226
123 C++11 lambda 간단사용법과 성능비교. 4 file Lyn 2012.01.30 32732
122 Boost 빌드 방법 1 Lyn 2012.01.14 31852
121 Visual C++ 2013 추가기능 2. Variadic Tamplate - 1 file Lyn 2013.12.03 30753
120 C++ 템플릿 상속에서 베이스 클래스의 멤버에 접근하는 경우의 문제 1 file Lyn 2012.08.29 30552
119 ubuntu 14.04 에서 apache rotatelogs 설치하기 Lyn 2014.08.22 30388
Board Pagination Prev 1 2 3 4 5 6 7 ... 8 Next
/ 8