💬
Logga in
Fuska.se

Slumpmässiga Tal

22 svar · startad

Nivå 0 · Nykomling
Trådstartare #1

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...

Nivå 0 · Nykomling
#2

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..

Nivå 0 · Nykomling
Trådstartare #3

Okej, tack! ^_^

Vill gärna ha fler exempel...

Nivå 0 · Nykomling
#4

Det finns inga slumpmässiga tal.

Nivå 0 · Nykomling
Trådstartare #5
↗ till inlägget

Det finns inga slumpmässiga tal.

Jag vet <_<

 

Men jag vill veta hur de "slumpmässiga" talen genereras...

Nivå 0 · Nykomling
#6

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.

Nivå 0 · Nykomling
Trådstartare #7

Okej, tack igen!

När det gäller tvspel så har man oftast inte en klocka, eller?

Senast ändrad:

Nivå 0 · Nykomling
#8

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...

3 Apr 2008
Nivå 0 · Nykomling
Trådstartare #9

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...

Nivå 0 · Nykomling
#10
↗ till inlägget

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...

Hur menar du med den sista frågan?
Nivå 0 · Nykomling
#11

Han menar att om man känner till systemet så kan man tajma det numret som han vill ha.

Nivå 0 · Nykomling
#12
↗ till inlägget
↗ till inlägget

Det finns inga slumpmässiga tal.

Jag vet <_<

 

Men jag vill veta hur de "slumpmässiga" talen genereras...

 

Det kallas Pseudorandom. pseudoslumpmässiga tal. Alltså, de försöker låtsas vara slumpmässiga.

 

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ägget
Han menar att om man känner till systemet så kan man tajma det numret som han vill ha.
Inte 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...).
4 Apr 2008
Nivå 0 · Nykomling
Trådstartare #13

Jaha, tack.

Btw, vad är modulo?

Nivå 0 · Nykomling
#14
↗ till inlägget

Jaha, tack.

Btw, vad är modulo?

Att räkna med rest.

 

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.

5 Apr 2008
Nivå 0 · Nykomling
Trådstartare #15

aha, det där likhetstecknet med tre streck?

Nivå 0 · Nykomling
#16

modulos tecken är ett procent-tecken... vad du tänker på för likhetstecken vet jag inte:P

Nivå 0 · Nykomling
Trådstartare #17
↗ till inlägget

modulos tecken är ett procent-tecken... vad du tänker på för likhetstecken vet jag inte:P

Typ 13 och 9 är kongurent modulo 4.

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.

Nivå 0 · Nykomling
#18

knappt så jag fattar vad du säger :D

 

4%3 =1

13%9 =4

 

rand()%20+1 =1-20

Nivå 0 · Nykomling
Trådstartare #19

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:

http://sv.wikipedia.org/wiki/Modulo

Senast ändrad:

7 Apr 2008
Nivå 0 · Nykomling
#20
↗ till inlägget

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:

http://sv.wikipedia.org/wiki/Modulo

Men 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...)

Vill du vara med i diskussionen?

Bli medlem Logga in