로그인

검색

C/C++
2014.01.19 20:20

RAND_MAX

MoA
조회 수 1128 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
대부분의 랜덤넘버 제네레이터는 레머(Lehmer)가 고안한 다음과 같은 알고리듬을 통해서 난수를 순서대로(successively) 만들어냅니다.

X(i+1) = ( a * X(i) + c ) mode M

이러한 알고리듬을 따르는 난수 발생기를 congurential random number generator라고 부릅니다.
이때, (M-1)이 발생 가능한 최대의 난수가 되며,
a와 c는 난수발생기의 설계자가 정하는 값입니다.
또한 초기값 X(1)은 알고리듬 수행시마다 결정되는 초기 seed 값입니다. C로 프로그래밍할때는 srand()함수로 정해지는 것이 X(1)입니다.
다른 변종들이 있기는 하나, 기본적인 방법은 동일합니다.


이러한 방법으로 발생되는 랜덤넘버는 한가지 주요한 특징이 있는데, 발생되는 난수가 일정한 주기를 갖고 순환한다는 것이죠. 상수 a는 난수발생기의 주기를 결정하며, 상수 c는 하나의 난수와 다음 난수 사이의 격차가 얼마나 될지를 결정합니다. 이때 X(1)은 발생되는 수열의 순서를 결정합니다. 예를들어, a = 11, c = 1, m = 16으로 하고, X(1) = 0 으로 시드를 주면,
0, 1, 12, 5, 8, 9, 4, 13, 0, ...
으로 8의 주기를 가지고 같은 수열이 순환하게 됩니다. rand함수가 '근사적 난수pseudo-random number'를 '합동되게congurential' 발생한다는 것이 바로 이런 의미입니다. 원래 완전 난수는 발생 패턴을 예측할 수 없어야 하지만, rand함수가 반환하는 난수는 패턴을 예측할 수 있기 때문이죠.
또한 이 난수의 수열이 최소 0에서 최대 m-1 까지의 범위를 가지기는 하지만, m개의 수가 모두 포함되지는 않습니다. 0부터 m-1까지중 일부의 수만 난수로 발생할 뿐이지요.

이러한 문제를 해결하기 위해 congurential random number generator중에서 c = 0인 경우, 즉 난수 발생기가 사용하는 식이 다음과 같은 난수 발생기를 multiplicative congurential random number generator라고 부릅니다. 
X(i+1) = ( a * X(i) ) mode M

MC난수발생기는 X(1)이 0이 아니라면 1부터 M-1까지의 모든 수가 주기 M-1을 가지고 순차적으로 순차적으로 반환됩니다. 예를들어, a=6, m=13, X(1) = 1이라면,
1, 6, 10, 8, 9, 2, 12, 7, 3, 5, 4, 11, 1, ...
의 순서로 주기가 12인 수열로 난수가 발생됩니다.

따라서 질문하신 내용에서, 주기가 232라는 말은 위의 수식에서 a= 232라는 말이 되며, M-1이 바로 RAND_MAX로 정의된 상수입니다.
대부분의 시스템에서 M은 2^16으로 정의되어 M = 32768로 사용하며, 이때 RAND_MAX는 M-1 = 32767이 됩니다.


도움말의 좀더 정확한 번역은 다음과 같습니다.
==========================================================================
rand uses a multiplicative congruential random number generator with period 232 to return successive pseudo-random numbers in the range 0 to RAND_MAX. 

RAND_MAX :Maximum value returned by rand function. 


rand함수는 232의 주기를 가지는 곱셈기반의 합동난수 발생장치를 사용하여 0부터 RAND_MAX의 범위 내에서 근사난수를 순서대로 반환한다.

RAND_MAX : rand함수가 리턴하는 최대값
?
  • ?
    수강생 2015.04.17 19:07
    실례지만 뭐좀여쭤보고싶은게있는데 연락수단이없어 댓글남깁니다. 메일주소 알려주실수있는지요
  • profile
    MoA 2015.05.22 14:45
    늦게 봤네요. 메일 주소는 vfinger at 네이버 입니다.

  1. Programming 게시판 관련

    Date2014.11.01 CategoryTool/etc ByMoA Views5121
    read more
  2. 정신나간 정렬 알고리즘

    Date2015.10.13 CategoryC/C++ ByMoA Views1303
    Read More
  3. RAND_MAX

    Date2014.01.19 CategoryC/C++ ByMoA Views1128
    Read More
  4. __FILE__ __LINE__ __FUNCTION__ 등 매크로

    Date2014.01.02 CategoryC/C++ ByMoA Views1444
    Read More
  5. C++11 A cheat sheet

    Date2013.08.21 CategoryC/C++ ByMoA Views848
    Read More
  6. fopen 함수가 Multi Thread 에서 안전한가?

    Date2013.07.28 CategoryC/C++ ByMoA Views1375
    Read More
  7. memset vs for 초기화. 속도 차이가 얼마나 날까?

    Date2013.07.28 CategoryC/C++ ByMoA Views1499
    Read More
  8. Data Conversions

    Date2013.07.28 CategoryC/C++ ByMoA Views1002
    Read More
  9. 파일 입출력

    Date2013.07.28 CategoryC/C++ ByMoA Views1160
    Read More
  10. ofstream ifstream

    Date2013.07.28 CategoryC/C++ ByMoA Views1342
    Read More
  11. C, C++ 에서의 불(bool, boolean) 타입의 동작

    Date2013.07.28 CategoryC/C++ ByMoA Views1105
    Read More
  12. Simplified Logger Class

    Date2013.07.28 CategoryC/C++ ByMoA Views1200
    Read More
  13. Buffer Overrun

    Date2013.07.28 CategoryC/C++ ByMoA Views1267
    Read More
  14. Google의 C++ 라이브러리

    Date2013.07.28 CategoryC/C++ ByMoA Views1391
    Read More
  15. fwrite(), fread()

    Date2013.07.28 CategoryC/C++ ByMoA Views1324
    Read More
  16. Binary 데이터 저장 by Google

    Date2013.07.28 CategoryC/C++ ByMoA Views1134
    Read More
  17. C 언어의 문자형 변수 char - 8비트 정수형 변수

    Date2013.07.28 CategoryC/C++ ByMoA Views2755
    Read More
  18. C언어의 변수 float와 double - Float Point 처리

    Date2013.07.28 CategoryC/C++ ByMoA Views926
    Read More
  19. 비트연산자

    Date2013.07.28 CategoryC/C++ ByMoA Views1122
    Read More
  20. extern "C" 에 관하여

    Date2013.07.28 CategoryC/C++ ByMoA Views1152
    Read More
  21. C++에서 base64로 인코딩

    Date2012.11.15 CategoryC/C++ ByNaya Views1068
    Read More
Board Pagination Prev 1 2 Next
/ 2