메뉴 건너뛰기

창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳

제가 알고 있는 난수의 사용방법은
srand( (unsigned int) time( NULL ) );
로 srand를 지정하고
rand()를 해서 랜덤난수를 가져오는 것인데
함수값이 어쩌고 하는 원리더군요
그런데 원리를 생각해 보니 이게 정말 난수의 역할을 해낼수 있을까요?ㅡ,.ㅡ;
애초에 time()이란 함수는 시간을 의미한다고 합니다
그러면 시간이 안 지나면 난수값이 안바뀌는건 아닐까요?
정말 저렇게 써도 암문제 없는건지...
ps:난수발생범위가 30000정도의 수에 제한되는데 늘리는 방법 없을까염
조회 수 :
3868
등록일 :
2008.07.15
05:34:05 (*.50.69.16)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=220037

똥똥배

2008.07.15
07:13:52
(*.193.78.89)
난수는 특별한 공식에 의해서 발생됩니다.
예를 들어 1~3사이의 난수를 발생시키려고 한다면
특수 공식에 의해서 1 1 3 2 3 2 1 식으로 발생하겠죠.
이 공식에 대해서 자세히는 모르지만 모든 수를 공평하게 순서를 알 수 없게 발생시켜 줍니다.
근데 문제는 공식에 의해서 발생되므로 언제나 1 1 3 2 3 2 1 식으로 같은 순서로 난수가 발생한다는 거죠.
여기서 srand의 역할은 그 시작점을 정해주는 겁니다.
정확히 시작점인지 시작되는 인수를 정하는 건지는 몰라도 일단 덮어두고...
아무튼 그 시작되는 수가 보통 때는 언제나 0이라면 srand에서는 time값을 넣어줌으로 시작점을 알 수 없게 만드는 겁니다.
시간에 따라서 시작점이 틀려지니 사실상 어떤 수가 발생할 지는 알 수 없는 것이죠.
이것이 rand와 srand의 원리입니다.

그리고 rand에 제한은 없을 건데요???
제한이 30000이라는 건 어디서 들으신 건지???

A.미스릴

2008.07.16
07:13:32
(*.50.69.16)
rand 소스가 있는 헤더에는 RAND_MAX 라는 #define으로 정의된 상수가 있는데 가 0xffff(30000정도의 수)로 정의되어 있어서
그 수에 해당하는 30000정도까지의 수만 나옵니다
RAND_MAX를 재정의하는 법을 모르겠어요

똥똥배

2008.07.17
03:15:47
(*.239.144.2)

아마 short(과거의 int)정도를 생각한 것 같군요.
그렇다고 해도 간단하지 않습니까?
((rand()%0xffff) << 16) | (rand()%0xffff)
식으로 사용하십시오.

A.미스릴

2008.07.18
05:49:01
(*.50.69.16)
비트 밀기가 잘 사용이 안될 것 같았는데
그런 곳에 많이 쓰이는군요;;
List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일sort
105 문D라이브로 더블드래곤을 만들자(3) file 똥똥배 3430   2008-04-18 2008-04-18 18:27
 
104 문D라이브로 더블드래곤을 만들자(4) [2] file 똥똥배 3213   2008-04-20 2008-04-21 07:20
 
103 C++ 데이터의 바이트 용량 임의로 정의할수 없나영 [1] A.미스릴 3059   2008-04-21 2008-04-21 07:18
int는 4바이트로 정해져 있는데 약간의 수만 있으면 되는 수도 있는데 괜히 많은 숫자를 사용해서 메모리를 많이 사용하는 건 아닐지 ㅡㅡ; 3바이트라던지 4비트라던지... 데이터의 바이트 사용량을 임의로 바꿀수 없나요  
102 문D라이브로 더블드래곤을 만들자(5) [6] file 똥똥배 3072   2008-04-21 2008-04-24 03:23
 
101 문D라이브로 더블드래곤을 만들자(6) [2] file 똥똥배 3114   2008-04-23 2008-04-25 05:01
 
100 문D라이브로 더블드래곤을 만들자(7) file 똥똥배 3480   2008-04-27 2008-04-28 04:22
 
99 문D 라이브 질문 [5] 대슬 2889   2008-05-15 2008-05-16 06:13
1. 음악이나 사운드는 어떻게 불러와서 출력하나요. 배웠었는데 까먹었음. 2. 그림을 원하는 각도로 자유롭게 회전시켜서 출력하는 기능은 없나요?  
98 문D라이브로 더블드래곤을 만들자(8) [1] file 똥똥배 2973   2008-05-16 2009-01-07 22:05
 
97 이상하군요. [2] 대슬 2490   2008-05-16 2009-01-07 22:05
MIDI 음악을 메인 루프 앞에서 재생시킨 후 다른 음악을 재생시키려고 했더니 그 다음부턴 음악이 정지만 하고 재생이 되지를 않네요. 예전에 배고파요 만들었을 때는 비슷하게 해도 별 문제가 없었던 것 같은데, 왜 이러는지 잘 모르겠습니다. void bgm(int ...  
96 문D라이브로 더블드래곤을 만들자(9) 똥똥배 2889   2008-05-17 2008-05-17 03:07
9편 : 체계화된 동작 지금까지 열심히 이 강의를 따라오신 분들이라면 지금 게임의 여러 버그가 산재해 있음을 깨달으셨을겁니다. 그걸 왜 그냥 내버려 뒀나면... 귀찮아서~ ~는 훼이크고 일단 가르치는 주제에서 벗어나면 집중력이 떨어지고 어느 정도 이해력...  
95 문D라이브로 더블드래곤을 만들자(10) file 똥똥배 4065   2008-05-17 2008-05-17 03:07
 
94 문D라이브로 더블드래곤을 만들자(11) file 똥똥배 4647   2008-05-17 2008-05-17 20:24
 
93 #define에 대해 [1] A.미스릴 4061   2008-05-19 2008-05-19 18:57
#define을 너무 많이 쓰면 코드에 불안정화가 온다는데 사실인가여? 그러면 불안정화를 막으러면 어떻게 해야하나여 아니면 enum이나 const를 써야 하나...  
92 문D 질문 [5] A.미스릴 3847   2008-05-26 2008-06-12 18:55
1.글자, 문장을 화면상에 출력하는 방법 2.숫자를 스트링으로 형변환할떄 아스키 코드가 아니라 숫자가 옮겨가게 하는법 3.사각형, 원 등을 출력하는 방법(Rectangle 함수같은거 없나여)  
91 문D 질문 #2 [1] A.미스릴 8797   2008-06-01 2009-01-07 22:05
이거 도배하는거같은 마음이 드네여 ㅈㅅ 제가 대화창을 다뤄봤는데여 CTextDlg textdialog(50); CTextDlg * pt_textdialog(&textdialog); pt_textdialog->SetDlg(100, 100, 200, 200); pt_textdialog->SetColor(255,255,0); pt_textdialog->SetDlgBox("_d...  
90 문D라이브 2008년 5월 19일 버전 [2] 혼돈 3747   2008-06-02 2015-12-09 08:06
휴가루 웍휴2를 개발하면서 조금씩 수정 중이지만, 미스릴님의 요청이 있어서 올립니다. 대화창에 관련되서 완성되었다는 것과 흥크립트 부분이 많이 변했다는 것이 주요 변경점입니다. 대화창의 경우 기본은 대화창이 없는 상태로 MakeDlgBox를 사용하면 크기...  
89 MFC 더블 버퍼링 질문 [2] A.미스릴 6602   2008-06-13 2013-11-23 08:43
void CPingpongView::OnDraw(CDC* pDC) { CPingpongDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here // 현재 창 크기와 같은 DC를 만듬 CRect rect; GetClientRect(&rect); int int_client_width = (rect.ri...  
88 씨언어 질문 (내일 시험 ㄷㄷ) [1] 쿠로쇼우 4331   2008-06-17 2008-06-17 22:10
1 121 12321 1234321 123454321 부탁 ㄷㄷ  
87 클레스들을 담은 헤더들의 혼란 [4] A.미스릴 3892   2008-06-21 2013-11-23 08:43
xxx.h파일 //xxx.h class xxx { ... 어떤 멤버함수 (yyy 뭐시기); ... } yyy.h파일 //yyy.h class yyy { ... 어떤 멤버함수 (xxx 뭐시기); ... } 이 두 클래스의 헤더 파일이 있으면 #include "xxx.h"와 #include "yyy.h"를 어떤 순서로 배치해야 할지 혼란스...  
86 문D라이브도 더블버퍼링이 필요한가요? [3] A.미스릴 4223   2008-06-28 2008-06-29 07:06
보니까 backbuffer에 그림을 붙이던데 backbuffer가 배경 버퍼니까 바로 화면에 출력되는건가요? 그런데 그걸 직접 쓰면 MFC의 DC처럼 깜박임과 속도저하가 오는건 아니죠?ㅡ,.ㅡ; 추가로 LoadPicture로 불러온 그림을 다시 안불러온것처럼 되돌리는건 없나요?