묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
srand()함수에 대한 질문여...
2003.04.17 23:08
rand()함수를 사용하기 전에 srand()함수를 먼저 사용해야 한다고 하는데요.
저는 ...
<?
echo rand(10,20);
?>
이렇게 해도, 10~20 사이의 숫자가 random하게 자~알 출력이 되거든요.
그런데, 제가 보고 있는 책이나, PHP관련 질문답변 게시판을 봐도, 반드시 srand() 함수로
난수를 발생하여야 rand() 함수를 사용할 때 숫자가 random 하게 나온다고 하는데요.
꼭 필요한 것 같지 않은 생각이 들지만, 책과 여러유저분들의 답변 내용을 보아 꼭 사용해
야할 것이라고 생각들어서 질문을 드려요.
질문1)
srand()함수를 이용하지 않고, rand() 함수만으로도 숫자가 random하게 출력이 잘 되는데, 왜??
srand()함수를 먼저 호출해야 하는건가요??
질문2)
srand() 함수는 seed 라는 난수를 발생하는 값을 전달받아 난수를 발생시키는데, 난수를 발생시
키기 위해 seed는 microtime() 함수를 사용한다고 제가 보고 있는 책과 여러유저분들이 남긴 글
을 보고 알았는데요, microtime()함수 말고, mktime() 함수를 사용하면 안되는건가요??
질문3)
예를들어
<?
srand(12345678910);
echo rand(10,20);
?>
이렇게 코딩을 하면 계속 10이라는 값만 나오던데요.
제가 생각하에는... srand() 함수에 지정된 1234567890 이라는 숫자중 임의의 숫자들이 조합되
어 난수가 발생되고, rand() 함수는 srand()함수에서 조합된 난수 중 10~20 사이에 해당되는 숫자면 반환시키고, 그렇지 않으면 다른 난수 달라고 요청하는 식으로 작동되는 것이라고 생각했었
는데, 그렇지가 않더라구요. 제가 보고 있는 책에 나온 예제를 보면...
<?
srand ((double)microtime()*1000000);
echo rand(1,10);
?>
이에 대한 대략적인 설명이...
계속 값이 바뀌는 microtime()함수에 의해 발생된 숫자중 실수부분에 1000000 을 곱한 결과값을 가지고 난수를 발생시키고 이 난수를 가지고 rand() 함수는 계속 다른 숫자를 random 하게 반환할 수 있다
라고 나와 있는데요, seed에 전달된 값이 몇십만은 되는데...어떻게 10~20의 사이의 숫자를 만
들어 낸다는 것인지..알 수가 없네요. 이에대한 설명이 없기 때문에 srand()함수를 사용해야
하는 이유를 모르겠더라구요.
그리고, srand() 함수를 사용할 때와 사용하지 않을 때의 차이점도 예제로 나와 있지도 않고..
ㅡㅡ; 정말로 답답하네요..
저는 ...
<?
echo rand(10,20);
?>
이렇게 해도, 10~20 사이의 숫자가 random하게 자~알 출력이 되거든요.
그런데, 제가 보고 있는 책이나, PHP관련 질문답변 게시판을 봐도, 반드시 srand() 함수로
난수를 발생하여야 rand() 함수를 사용할 때 숫자가 random 하게 나온다고 하는데요.
꼭 필요한 것 같지 않은 생각이 들지만, 책과 여러유저분들의 답변 내용을 보아 꼭 사용해
야할 것이라고 생각들어서 질문을 드려요.
질문1)
srand()함수를 이용하지 않고, rand() 함수만으로도 숫자가 random하게 출력이 잘 되는데, 왜??
srand()함수를 먼저 호출해야 하는건가요??
질문2)
srand() 함수는 seed 라는 난수를 발생하는 값을 전달받아 난수를 발생시키는데, 난수를 발생시
키기 위해 seed는 microtime() 함수를 사용한다고 제가 보고 있는 책과 여러유저분들이 남긴 글
을 보고 알았는데요, microtime()함수 말고, mktime() 함수를 사용하면 안되는건가요??
질문3)
예를들어
<?
srand(12345678910);
echo rand(10,20);
?>
이렇게 코딩을 하면 계속 10이라는 값만 나오던데요.
제가 생각하에는... srand() 함수에 지정된 1234567890 이라는 숫자중 임의의 숫자들이 조합되
어 난수가 발생되고, rand() 함수는 srand()함수에서 조합된 난수 중 10~20 사이에 해당되는 숫자면 반환시키고, 그렇지 않으면 다른 난수 달라고 요청하는 식으로 작동되는 것이라고 생각했었
는데, 그렇지가 않더라구요. 제가 보고 있는 책에 나온 예제를 보면...
<?
srand ((double)microtime()*1000000);
echo rand(1,10);
?>
이에 대한 대략적인 설명이...
계속 값이 바뀌는 microtime()함수에 의해 발생된 숫자중 실수부분에 1000000 을 곱한 결과값을 가지고 난수를 발생시키고 이 난수를 가지고 rand() 함수는 계속 다른 숫자를 random 하게 반환할 수 있다
라고 나와 있는데요, seed에 전달된 값이 몇십만은 되는데...어떻게 10~20의 사이의 숫자를 만
들어 낸다는 것인지..알 수가 없네요. 이에대한 설명이 없기 때문에 srand()함수를 사용해야
하는 이유를 모르겠더라구요.
그리고, srand() 함수를 사용할 때와 사용하지 않을 때의 차이점도 예제로 나와 있지도 않고..
ㅡㅡ; 정말로 답답하네요..
PHP 버전 4.2.0 이후 부터는 srand 없이 rand 호출이 가능해 졌습니다. 시스템에서 시드를 주어주기 때문이죠
그리고 srand에서 받은 seed를 통해 rand에서 난수를 발생하는 원리는 여기에 쓰기엔 --a 힘들고
의사 난수 (pusedo-random number)에 대해서 알아보시면 알수 있을거에요.