Jag har en fråga av ren nyfikenhet.
Hur genererar datorer slumpmässiga tal?
Vad jag har märkt av programmering är att den är mycket "straight-forward" och slumpmässiga tal skulle vara omöjligt...
Jag har en fråga av ren nyfikenhet.
Hur genererar datorer slumpmässiga tal?
Vad jag har märkt av programmering är att den är mycket "straight-forward" och slumpmässiga tal skulle vara omöjligt...
I c++ och funktionen srand så tar den antalet sekunder sen nyår 1989, eller nåt sånt...
Vet inte riktigt hur java kör med sin math.random funktion, men lär vara nåt liknande..
Okej, tack! ^_^
Vill gärna ha fler exempel...
Det finns inga slumpmässiga tal.
↗ till inläggetJag vet <_<Det finns inga slumpmässiga tal.
Men jag vill veta hur de "slumpmässiga" talen genereras...
Det är oftast genom tid eftersom det hela tiden ändras och då är bra att använda. Det är inte mycket annat i datorn som hela tiden uppdateras. Uptime möjligtvis, men även det är ju en typ av tid. Bara att man räknar från ett annat datum.
Okej, tack igen!
När det gäller tvspel så har man oftast inte en klocka, eller?
antagligen genererar maskinen "random" genom att använda den interna klockan, de flesta konsoller har ju en sån, och lär då också köra på samma...
Okej, så det mesta handlar om tid då man genererar "slumpmässiga! tal...
Det bodre isåfall inte vara så svårt att kontrollera vad du får...
↗ till inläggetHur menar du med den sista frågan?Okej, så det mesta handlar om tid då man genererar "slumpmässiga! tal...
Det bodre isåfall inte vara så svårt att kontrollera vad du får...
Han menar att om man känner till systemet så kan man tajma det numret som han vill ha.
↗ till inläggetDet kallas Pseudorandom. pseudoslumpmässiga tal. Alltså, de försöker låtsas vara slumpmässiga.↗ till inläggetDet finns inga slumpmässiga tal.
Jag vet <_<
Men jag vill veta hur de "slumpmässiga" talen genereras...
Det finns olika sätt att generera slupmässiga tal. Man kan ha en lång lista med tal.
321874543989844364564565
498454543446654645745745
432548596404305435605656
...
Sedan väljer man ett tal baserat på tiden som gått sedan vad det nu är... Ngt konstigt årtal.
Då får man ett tal som typ 568936879064335689896443445. Problemet är att man oftast inte behöver ett så stort tal... Därför kan man använda modulo.
rand() % 20 ger ett tal mellan 0 och 19. (Endast heltal, då det är restberäkning.)
↗ till inläggetInte så lätt... Det är ofta inte bara tid utan även annat som räknas med. T.ex. att två tal inte ska komma i rad (alltså är det inte så nära random...).Han menar att om man känner till systemet så kan man tajma det numret som han vill ha.
Jaha, tack.
Btw, vad är modulo?
↗ till inläggetAtt räkna med rest.Jaha, tack.
Btw, vad är modulo?
Istället för 5/2 = 2.5 så 5/2 = 2, rest 1. Det är den där resten som man räknar ut.
aha, det där likhetstecknet med tre streck?
modulos tecken är ett procent-tecken... vad du tänker på för likhetstecken vet jag inte:P
↗ till inläggetTyp 13 och 9 är kongurent modulo 4.modulos tecken är ett procent-tecken... vad du tänker på för likhetstecken vet jag inte:P
13=9(mod 4)
(likhetstecknet ska ha 3 streck)
13 och 9 ger samma rest vid dividering av 4.
Något sådant harjag läst.
knappt så jag fattar vad du säger :D
4%3 =1
13%9 =4
rand()%20+1 =1-20
Vi tar det så här:
Om x%y = a
och
Om z%y = a
så är
x = z(mod y)
Om både x och z ger samma rest vid delning med y så är x och z kongurent modulo y.
Wikipedia:
↗ till inläggetMen det vi vill kolla är inte om två tal har samma rest utan vi vill ta reda på resten. Då blir det % och inte = med tre streck. (Lite jobbit att skriva = med tre streck när man programmerar då det inte finns på tangentbordet...)Vi tar det så här:
Om x%y = a
och
Om z%y = a
så är
x = z(mod y)
Om både x och z ger samma rest vid delning med y så är x och z kongurent modulo y.
Wikipedia:
Vill du vara med i diskussionen?
Bli medlem Logga in