웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
좋은 난수값을 얻기위한 시드배정 방법 mt_srand(), srand()
2002.02.21 04:35
list($usec,$sec) = explode(" ",microtime());
/*
Test: Each get rand sequence are 10time.
ex) 5.3point meaning 5point integer + 3point decimal
*/
/*
PHP Manual 4 본문에 제시된 예문
5.0point - 1time
6.0point - 9time
*/
// $rand = (double)microtime()*1000000;
/*
PHP Manual 4 유저가 포스팅한 예문
decimal 값이 나오는 문제점이 있다.
8.6point - 1time
9.4point - 1time
9.5point - 7time
10.3point - 1time
*/
// $rand = (double)$sec * $usec;
/*
2002-02-17 07:13:45 양창민에 의하여 생성된 알고리듬 - 방법 1
분포는 전항 결과값이 평균적으로 8~10자리인데 최소 자릿수인 8자리에 고정
8.0point - 10time
*/
$rand = explode(".",$usec * $sec); $rand = (double)substr($rand[0]*$rand[1],0,8);
/*
2002-02-18 08:08:05 양창민에 의하여 생성된 알고리듬 - 방법 2
평균분포 9자리를 유지하는 plus연산
9.0point - 9time
10.0point - 1time
*/
// $rand = explode(".",$usec * $sec); $rand = $rand[0] + $rand[1];
mt_srand($rand);
srand($rand);
// ycm_debug( (double)microtime()*1000000 , (double)$sec * $usec , $rand );
P.S in 2002-02-21 03:29:17
위 마지막 ycm_debug() 는 위의 각 시드 배정방법들의 작용결과를
테스트하기 위하여 10단계 히스토리 3원소 나열하는 form 구조체로서
해당 시드별 생성 난수 분포를 파악하기 위하여 만든 함수로,
위의 함수를 바탕으로 무수한 난수결과값을 얻는 과정을 거쳐
해당 시드별 난수 분포 유형을 명확히 파악한 뒤
다른 분들 참고하길 바라는 마음에 적은 것인데...
개선요지는
- 가능한 integer값의 분포가 0~9까지 골고루 될 것.
- 자릿수 변화가 적을 것.
- 연산시간상 불리함을 최소화할 것.
참고로 저는 홈퓌 방문자에게 메인 대문역할 게시판에 38원소 배열,
BGM 플레이어에서 곡 인덱싱에 사용되는 30~100원소 배열,
게시판 메뉴 칼러 패턴을 얻는데 사용되는 컬러코드값 3원소 배열,
상단 타이틀 배경색에 사용되는 컬러코드값 3원소 배열들에
대하여 난수를 사용하는데 정밀 난수가 필요치않아
그냥 5-7포인트정도 integer 값이 나오는(위 주석처리안된) 사용중인데
아무리 난수발생알고리듬이 뛰어나도 필연적으로 중복값은 발생하죠.
그 중복값 발생의 빈도를 줄이고자 시드배정 방법을 달리하는 것인데
(요 부분 제가 와서 찜찜해 수정 ^^ 아공 배고파랑..)
이 부분에 있어 난수의 한계성을 느끼고 궁극적으로 전체 배열값에서
결코 중복되지않도록 하는 다른 알고리듬 구현을 모색하다가
그냥 최대효과, 최소소요시간에 만족하기로 한 상태입니다.
/*
Test: Each get rand sequence are 10time.
ex) 5.3point meaning 5point integer + 3point decimal
*/
/*
PHP Manual 4 본문에 제시된 예문
5.0point - 1time
6.0point - 9time
*/
// $rand = (double)microtime()*1000000;
/*
PHP Manual 4 유저가 포스팅한 예문
decimal 값이 나오는 문제점이 있다.
8.6point - 1time
9.4point - 1time
9.5point - 7time
10.3point - 1time
*/
// $rand = (double)$sec * $usec;
/*
2002-02-17 07:13:45 양창민에 의하여 생성된 알고리듬 - 방법 1
분포는 전항 결과값이 평균적으로 8~10자리인데 최소 자릿수인 8자리에 고정
8.0point - 10time
*/
$rand = explode(".",$usec * $sec); $rand = (double)substr($rand[0]*$rand[1],0,8);
/*
2002-02-18 08:08:05 양창민에 의하여 생성된 알고리듬 - 방법 2
평균분포 9자리를 유지하는 plus연산
9.0point - 9time
10.0point - 1time
*/
// $rand = explode(".",$usec * $sec); $rand = $rand[0] + $rand[1];
mt_srand($rand);
srand($rand);
// ycm_debug( (double)microtime()*1000000 , (double)$sec * $usec , $rand );
P.S in 2002-02-21 03:29:17
위 마지막 ycm_debug() 는 위의 각 시드 배정방법들의 작용결과를
테스트하기 위하여 10단계 히스토리 3원소 나열하는 form 구조체로서
해당 시드별 생성 난수 분포를 파악하기 위하여 만든 함수로,
위의 함수를 바탕으로 무수한 난수결과값을 얻는 과정을 거쳐
해당 시드별 난수 분포 유형을 명확히 파악한 뒤
다른 분들 참고하길 바라는 마음에 적은 것인데...
개선요지는
- 가능한 integer값의 분포가 0~9까지 골고루 될 것.
- 자릿수 변화가 적을 것.
- 연산시간상 불리함을 최소화할 것.
참고로 저는 홈퓌 방문자에게 메인 대문역할 게시판에 38원소 배열,
BGM 플레이어에서 곡 인덱싱에 사용되는 30~100원소 배열,
게시판 메뉴 칼러 패턴을 얻는데 사용되는 컬러코드값 3원소 배열,
상단 타이틀 배경색에 사용되는 컬러코드값 3원소 배열들에
대하여 난수를 사용하는데 정밀 난수가 필요치않아
그냥 5-7포인트정도 integer 값이 나오는(위 주석처리안된) 사용중인데
아무리 난수발생알고리듬이 뛰어나도 필연적으로 중복값은 발생하죠.
그 중복값 발생의 빈도를 줄이고자 시드배정 방법을 달리하는 것인데
(요 부분 제가 와서 찜찜해 수정 ^^ 아공 배고파랑..)
이 부분에 있어 난수의 한계성을 느끼고 궁극적으로 전체 배열값에서
결코 중복되지않도록 하는 다른 알고리듬 구현을 모색하다가
그냥 최대효과, 최소소요시간에 만족하기로 한 상태입니다.
댓글 0
제목 | 글쓴이 | 날짜 |
---|---|---|
EMail 주소 검사하기 [6] | ZipShin | 2002.07.06 |
트리뷰를 흉내낸 클래스 입니다.^^;; | 용가리 | 2002.06.24 |
위 짜가리 클래스 활용 1 (FTP 디렉토리 트리뷰) | 용가리 | 2002.06.24 |
위 짜가리 클래스 활용 1 (디렉토리 트리뷰) | 용가리 | 2002.06.24 |
트리뷰를 흉내낸 클래스 사용법 입니다.^^;; | 용가리 | 2002.06.24 |
리스트뷰를 흉내낸 클래스 입니다.^^;; [2] | 용가리 | 2002.06.22 |
위의 리스트뷰 흉내낸 클래스 활용법 입니다.^^; [1] | 용가리 | 2002.06.22 |
위의 리스트뷰 흉내낸 클래스 사용법 입니다.^^; | 용가리 | 2002.06.22 |
php에서 GD를 이용한 3차원 막대 그래프 입니다. [4] | 용가리 | 2002.06.22 |
리눅스로 쉘 프로그래밍 할때 [1] | OsE= | 2002.06.19 |
[mysql] 하나 더 추가요. 역시 별로 쓸대 없는거... | 불티나 | 2002.06.18 |
[mysql] 별로 쓸대는 없지만..그래도.. | 불티나 | 2002.06.18 |
만들어보자~ PortScan For PHP [5] | OsE= | 2002.06.16 |
Flush() [2] | OsE= | 2002.06.16 |
[책에서 퍼옴] html과 php의 결합 혹은 분리 [7] | 박민호 | 2002.06.13 |
php 와 flash 의 연동을 이용한 제로보드 최근글 추출...(소스)
![]() | 주현석 | 2002.06.05 |
총페이지의 값을 구하고 출력하기 | 불티나 | 2002.06.05 |
제로카운터 한 계정에서 여러개 사용하기 [7] | 영혼 | 2002.06.01 |
PHP로 그래프를 그려보자. [2] | ★Zzony~ | 2002.05.30 |
[씽크식 PHP] 출력, 어떤 방법이 빠를까? [11] | John Sync. | 2002.05.29 |