제목 | rand()? | ||
---|---|---|---|
글쓴이 | milosz | 작성시각 | 2012/08/01 12:18:55 |
|
|||
늘 얘기만 듣다 이미지로 보니 확실히 느낌이 오네요. 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
|
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가 훨씬 고르게 나오는군요... 감사합니다ㅎ
|
php.net 에서도 rand 보다는 mt_rand 를 사용하라고 권고 한걸로 알고 있습니다.
꽤 오래전에 말이죠.
rand 는 C로 만들어진 모듈을 php화 한걸로 알고 있습니다.
1 ~ 1000 까지 공정하게 1 노출이 1/1000 일까? 라고 하면 당당히 아니오. 라고 답해줄수 있지요.
그 이유는 난수 발생은 단어 그 자체적으로 랜덤 이라는 의미가 아니라 수학적인 계산법에 의한 결과물 이라고 합니다.
그래서 좀더 공정한(?) 난수 발생 함수를 만든게 mt_rand()
그냥 그렇다고만 알고 그냥 씁니다.