자유게시판

제목 rand()?
글쓴이 milosz 작성시각 2012/08/01 12:18:55
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 10969   RSS
늘 얘기만 듣다 이미지로 보니 확실히 느낌이 오네요.

php에서 진정한 Random number를 얻는 방법이 뭘까요?
 
<?php
// Requires the GD Library
header("Content-type: image/png");
$im = imagecreatetruecolor(512, 512)
    or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for ($y = 0; $y < 512; $y++) {
    for ($x = 0; $x < 512; $x++) {
        if (rand(0, 1)) {
            imagesetpixel($im, $x, $y, $white);
        }
    }
}  
imagepng($im);
imagedestroy($im);
 다음글 PHP vs JAVA (8)
 이전글 Acer 1편 (3)

댓글

kaido / 2012/08/01 12:45:24 / 추천 0
 mt_rand()

php.net  에서도 rand 보다는 mt_rand 를 사용하라고 권고 한걸로 알고 있습니다.

꽤 오래전에 말이죠.

rand 는 C로 만들어진 모듈을 php화 한걸로 알고 있습니다.

1 ~ 1000  까지 공정하게 1 노출이 1/1000 일까? 라고 하면  당당히 아니오. 라고 답해줄수 있지요.
그 이유는 난수 발생은 단어 그 자체적으로 랜덤 이라는 의미가 아니라 수학적인 계산법에 의한 결과물 이라고 합니다.
그래서 좀더 공정한(?) 난수 발생 함수를 만든게 mt_rand()

그냥 그렇다고만 알고 그냥 씁니다.
kaido / 2012/08/01 12:52:32 / 추천 0
 조금 철학적으로 보면 말이죠.

당신이 1 ~ 1000 랜덤을 1만번 했다고 합니다.

단순 계산으로는 1/1000 * 10  확률이니 1이 나올 확률은 10번 정도 입니다.

실제 해보니 

첫날은 1이 7번 나왓습니다.

두번째 1이 12번 나왓습니다.

세번째 1이 10번 나왓습니다.

이렇게 100일을 해서평균을 내어보니

1은 최소 6 ~ 13 번 나왔습니다.
중간값 약 9~11 정도 평균이 나왓습니다.

자!

최소 6번 나온 날에 당신은 1이 왜 6번뿐이 안나와? 이거 이상한거 아니야?

라고 했습니다.

어느날은 딱 10번 나왔습니다.

이야~ 이거 확률 딱 맞는거 아니야?



...... 실제 비슷한 테스트를 해보았는데 큰수의 법칙은 맞는 말이었고 1이 꼭 10번만 나와야 한다는것도

생각해보면 말이 안되는 것이죠.

이러한 이유로 뭔가 확률 게임을 만들었을때 유저들이 조작이니 뭐니 하면 전 그저 '당신의 운 입니다.' 라고 일관해 버립니다. 허허..;
milosz / 2012/08/01 13:21:00 / 추천 0
 mt_rand가 훨씬 고르게 나오는군요... 감사합니다ㅎ