Med rand-funktionen i Ruby kan du inte hamna i en oändlig loop, den har en cykel på219937-1 och alla värden kommer garanterat att dyka upp. Om du istället använde en annan slumpgenerator som ger två värden (oavsett sannolikhet för de två värdena), som t.ex. ett mynt, är sannolikheten att du hamnar i en oändlig loop ändå osannolikt liten. Slumpgeneratorn i Ruby är väldigt bra, men det finns en liten skevhet i sannolikheterna (den minsta jag sett för någon generell pseudo-slumpgenerator på en dator), den här algoritmen plockar bort den. Naturligtvis kan cykeln för den här funktionen bli kortare än för rand, så det var kanske lite fel att säga att den var bättre.Mekaniserad Apelsin skrev:Enda positiva jag ser är att det inte spelar någon roll om det är olika sannolikheter för att få 1 eller 0 med rand(). Samt det negativa att man faktiskt kan sätta programmet i en "oändligt" lång loop.mj skrev: Här är en kul grej, följande funktion (skriven i Ruby, som har en väldigt bra slumpfunktion, en variant på Mersenne Twister) ger värdet 0 eller 1, med 50% sannolikhet för varje värde. Funktionen är något lite, lite, ..., lite bättre än om man bara skulle använda rand(2). Var så goda och klura ut varför.
def singla_slant
a= b= nil
until a!=b
a= rand(2)
b= rand(2)
end
return a
end
Går även att tillämpa när man singlar slant med riktiga mynt. Även om det skulle vara ett fusk-mynt med hög sannolikhet för att hamna på en viss sida, så är sannolikheten för bägge sidor lika efter denna procedur.
hur programmerar man egentligen slump?!?
SV: hur programmerar man egentligen slump?!?
- Mekaniserad Apelsin
- Hedersmedlem
- Inlägg: 3777
- Blev medlem: 27 maj 2006, 12:24
- OS: Ubuntu
- Ort: Stockholm
- Kontakt:
SV: hur programmerar man egentligen slump?!?
En "bra" sannolikhetsgenerator har möjligheten att värdena alltid kommer i par.mj skrev: Med rand-funktionen i Ruby kan du inte hamna i en oändlig loop, den har en cykel på219937-1 och alla värden kommer garanterat att dyka upp. Om du istället använde en annan slumpgenerator som ger två värden (oavsett sannolikhet för de två värdena), som t.ex. ett mynt, är sannolikheten att du hamnar i en oändlig loop ändå osannolikt liten.

More Mekaniserad at http://blippe.se.