더 정밀한 랜덤값을 얻기위한 팁

C언어차원에서 제공하는 rand()함수는 그 정밀도가 상당히 낮다.
최대한 랜덤값주기를 높여서 사용하는 방법이 있긴하지만, 그래도
고성능을 요하는 게임이나 그래픽, 랜덤검색알고리즘등에는 무리가있다.

rand() 를 대체할 알고리즘으로는 XOR-Shift, Mersenne Twister 정도가 있다.
Mersenne Twister는 2^{19937}-1 라는 어마어마한 주기를 같는 랜덤값을 생성해 낸다.
visual studio 2010 에서는 기본라이브러리로 제공하고있다.

Mersenne Twister의 구체적인 사용예를 살펴보자.
( vs2010이 아닌 vs6.0, vs2007, vs2008 을 사용하는 경우는 boost 라이브러리를 설치, 링크하여 사용할 수 있다 )

먼저, Mersenne Twister 를 사용하기 위해 관련라이브러리를 추가한다.



그리고, 아래와같은 초기화를 수행한다.
시드값이나 동작환경(32bit, 64bit)등의 설정등은 보통 디폴트로 괜찮다.



여기서 10.0과 10.0은 랜덤값의 발생범위이다. (경계값은 포함이다. [-10.0, 10.0] )
그리고, 위의 예에서는 double 타입의 랜덤값을 생성하고 있지만 int 형의 랜덤값 발생은
uniform_real_distribution 대신에 uniform_int_distribution 로 바꿔주면 된다.