CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): terzeron (microkid)
날 짜 (Date): 2002년 10월 22일 화요일 오후 04시 21분 34초
제 목(Title): Re: rand(): Perl에서

문제에 대한 설명이 어렵습니다만...

Perl도 그 아랫단에서는 C library를 사용했을 것이고
그렇다면 srand(unsigned seed)와 rand(void)가 사용되었을
겁니다.

그리고 일반적으로 C에서 쓰는 방식은 loop 바깥에서
srand((unsigned) time(NULL));을 한 번 해주고
loop 내부에서 rand()를 호출하는 것입니다. loop가
반복되는 횟수만큼 랜덤 넘버를 얻게 되는 거죠.

근데 rand(void)는 정수 범위에서 값을 반환하게 됩니다.
0에서 RAND_MAX(2147483647) 사이의 값이죠. 하지만
일반적으로 사용자들이 원하는 범위로 좁혀서 사용하려면
rand() 호출 후에 해당 범위의 최대값으로 나눈 나머지를
사용하면 됩니다.

예를 들어, 0에서부터 11까지의 범위에서 랜덤 넘버를
받고 싶다면
rand() % 12
3에서부터 16까지의 범위에서라면
rand() % 14 + 3
이 되겠죠.

그리고 데이터셋이 여러 개라 하더라도 rand() 부른 후에
그 리턴값을 나눠주는 값을 데이터셋에 따라 바꿔주기만
하면 되지 않을까 싶네요. 

int size[10]; // 데이터셋 각각의 크기

rand() % size[i]

---
어떤 성취가, 어떤 조롱이, 또는 어떤 고뇌가 나를 기다리고 있을지 나는 모른다. 
나는 아무 것도 모른다. 그러나 나는 아직 과거의 경이로운 기적의 시대가 영원히 
과거의 것이 되어 버리지는 않았다는 사실을 굳게 믿고 있다.  - Stanislaw Lem -
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.