| [ 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 - |