로그인

검색

C/C++
2014.01.19 20:20

RAND_MAX

MoA
조회 수 1191 추천 수 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 네이버 입니다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Tool/etc Programming 게시판 관련 2 MoA 2014.11.01 5346
288 API/MFC __cdecl , __pascal, __stdcall MoA 2013.07.28 1272
287 C/C++ __FILE__ __LINE__ __FUNCTION__ 등 매크로 MoA 2014.01.02 1515
286 LLM [12월 1주] 떠오르는 '미스트랄 7B'...'라마 2' 이어 한국어 모델 세대교체 주도 OBG 2024.03.05 507
285 Python [GUI] Tkinter, wxPython MoA 2013.11.27 1547
284 Python [GUI] wxPython 기본 프로그램 file MoA 2013.11.30 1428
283 Python [GUI] wxPython에서 에러메시지 콘솔로 보는 법 MoA 2013.12.03 1335
282 Deeplearning [ifkakao] 추천 시스템: 맥락과 취향 사이 줄타 OBG 2024.01.10 378
281 Web [Javascript] 비동기, Promise, async, await 확실하게 이해하기 OBG 2022.05.27 397
280 Library [OpenCV] 얼굴 인식 예제 file MoA 2012.10.14 1997
279 Tool/etc [S/W 공학] 월-인원(man-month), LOC MoA 2013.09.23 1369
278 LLM [VESSL AI] 뉴욕주민의 프로젝트플루토 — LLM, LLMOps를 활용한 금융 미디어의 혁신 OBG 2024.04.21 717
277 Python [게임 만들기] 강좌 진행 예정 2 MoA 2014.04.26 2108
276 Python [농장게임 만들기] 1. Nubcake Farms 게임 소개 4 file OBG 2014.04.26 2317
275 Python [농장게임 만들기] 10. 상점을 추가하자 file MoA 2014.05.01 2988
274 Python [농장게임 만들기] 2. Nubcake Farms 클래스 분석 3 file OBG 2014.04.26 1401
273 Python [농장게임 만들기] 3. 배경을 그리자 6 file MoA 2014.04.28 2755
272 Python [농장게임 만들기] 4. 펜스를 그리자 5 file MoA 2014.04.30 1318
271 Python [농장게임 만들기] 5. 플레이어를 추가하자 1 file MoA 2014.04.30 1221
270 Python [농장게임 만들기] 6. 나머지 오브젝트를 그리자 1 file MoA 2014.05.01 1596
269 Python [농장게임 만들기] 7. 농부 행동 추가 1 file MoA 2014.05.01 1228
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15