View Full Version : ikke-spesielt-rand()
SharQ
30. september 2003, 09:01
De fleste har vel prøvd russisk-rulett spillet mitt (om ikke, klikk på disclaimeren nedenfor). Det fungerer slik at den velger et tall 1-6 på random, og dersom tallet er 1 så dør du.
Problemet er når man ser på statsen, på mer enn 6000 spill har 20% dødd. Det har vært en stund siden jeg hadde matematikk, men 20% = 1/5!
På et utvalg på over 6000 spill, ville det ikke være mer rimelig å anta at
x(lim(inf)) -> 1/5 ?
Såh: Er randomgeneratoren som php bruker virkelig så bedriten, eller har jeg driti meg ut i programskrivinga?
$choice = rand(0, 5);
if (!$choice)
{
/* boom */
}
if ($choice)
{
/* click*/
}
edit: Har forresten også tenkt på om det kunne være det at folk laster om siden dersom de taper, men det skulle ikke gjøre noen forskjell, siden den samme randomgeneratoren brukes hver gang, right?
gaucho
30. september 2003, 09:17
Hvis du bruker en PHP-versjon som er eldre enn 4.2.0 må du gi generatoren en ny seed med srand() før du kaller rand(), ellers vil samme seed brukes hver gang siden lastes. Det finnes også en bedre random-generator kalt mt_rand (http://no.php.net/manual/en/function.mt-rand.php)
Husk at disse gir pseudotilfeldige tall, altså tall som tilsynelatende er tilfeldige, men egentlig ikke er det. De er dog tilfeldige i den forstand at vi ikke kan forutse hvilket tall det neste kommer til å bli.
SharQ
30. september 2003, 09:22
Klar over pseudo-tilfeldigheter, men jeg trodde at min PHP versjon (PHP Version 4.3.3) hadde overkommet rand()-problemet, og at man slapp å seede randomgeneratoren manuelt?
Uansett synes jeg det virker særdeles merkelig: Tingen er at tallet ligger såpass nærme 1/5, at jeg blir mistenksom at noe er galt med programmeringen, heller enn randomgeneratoren. Likefullt, som du ser av kodesnutten, kan jeg ikke se hva det sku være.
Mates
30. september 2003, 10:06
Tror heller det er utregningen av prosenten som er feil:
For øyeblikket er det 6968 spill, og av dem så er det 1191 som har dødd. Det står at det er 20,62% som har dødd. Det er feil.
Hvis du tar (antall døde/antall overlevende) får du 20,62%, det vil si (1191/(6968-1191)=20,62%
Derfor er det nok denne feilen du har gjort.
Sett p%=døde/spill, ikke p%=døde/overlevende, så vil du få et riktigere tall (17,09%), selv om det også er litt over 1/6.
Det er forresten naturlig at det ligger rundt 1/5. Hvis sannsynligheten for død er 1/6, og du bruker p%=døde/overlevende, får du:
p%=(1/6)/(6/6-1/6)=1/5
ivioynar
30. september 2003, 11:04
Og det viktigste er at det ikke finnes tilfeldige tall i dataverdenen ;)
Dog, mates sin utregning ser riktig ut.
DrMatrix
30. september 2003, 11:17
You have survived 21 consecutive games of russian roulette. Statistically, there is a 2.17 percent chance of this happening.
Do you have the cahones for another try?
Flink er jeg! ;)
SharQ
30. september 2003, 17:34
Mates: Du har helt rett. Faen og. Jeg hadde til og med gjort utregningen, men brukte feil tallverdi i visningen.
Okay, unger, si etter læreren: BRUK VARIABELNAVN DU SELV FORSTÅR
okay, takk ;)
hj