webForumDet fria alternativet

två matematiska frågor

Programmeringur Programmering - Övrigt

12 svar · 872 visningar · startad av trexter.com

Medlem sedan apr. 20021 203 inlägg
Frågan#1

Denna tråden passar kanske bättre i något annat forum men jag
frågar här.

Första frågan (den andra kommer när jag fått svar på denna):
Hur slumpar en dator fram ett tal? Hur ser formeln ut?
Kan man själv slumpa fram tal genom att bara använda en
blyertspenna och ett papper?

:)

Medlem sedan aug. 2001458 inlägg
#2

När du gör ett program i C, tillhandahåller C-runtime libraryt "pseudo-slumptal". De är egentligen inte alls slumpvisa, utan är en talserie som hela tiden upprepas. Du kan själv bestämma hur serien ska upprepas genom att sätta ett "frö" (seed). Om du kör ditt program flera gåner med samma seed, kommer talserien bli densamma.

För kryptografi kan det här vara ganska förödande, där vill man ha bättre slumptal, så kallade kryptografiskt slumpmässiga tal. I exempelvis Windows finns funktionen "CryptGenRandom" (i kernel) för detta. Den använder olika process-id:s, tråd-id:s, systemtid, verklig tid, använderens miljövariabler, ledig plats på diskarna etc. som indata för att ge ett mer slumpmässigt värde.

Du kommer förmodligen få dåliga slumptal om du gissar för hand, eftersom människor tenderar att inte vara slumpmässiga när det gäller sånt här. Om man exempelvis väljer ett antal personer välja ett tal mellan 1 och 4, kommer statistiskt sett de flesta att välja 3.

Medlem sedan apr. 20021 203 inlägg
#3

Men hur vet datorn vilket tal i talserien den ska välja?
Finns det någon hyperavancerad formel som verkligen _slumpar_ fram ett tal?

:)

Medlem sedan aug. 2001458 inlägg
#4

Innan du börjar hämta slumptal sätter du ditt frö, i och med detta bestämmer du vilket det första talet ur serien ska bli. Sedan beräknas nästa tal ur serien beroende på det föregående, och C runtimen kommer ihåg det föregående talet åt dig, så varje gång du ropar på rand() används det föregående talet.

Har du Visual Studio? Isåfall finns källkoden till rand() och seed() i filen "C:\Program Files\Microsoft Visual Studio .NET\Vc7\crt\src\rand.c" (om du valde CRT source under installationen). Har du VC6 är det någon liknande katalog.

För .Net finns källkoden till Rand i .\clr\src\bcl\system\random.cs om du laddar hem Shared Source CLI koden (du behöver winzip för att öppna filen).

Medlem sedan maj 2001406 inlägg
#5

Man kan helt enkelt plocka värden från internminnet (en viss minnesposition som förmodligen väldigt sällan har samma värde på olika datorer) så funkar det t.ex. om du skapar en variabel utan att tilldela den ett startvärde i vissa programmeringsspråk

Medlem sedan apr. 20021 203 inlägg
#6

Ok, så genom att "plantera mitt frö" så börjar datorn gå igenom talserien och när jag kör Rnd så plockas ett värde?

Fråga nummer två:
Hur fungerar en miniräknare? Själva räkneprocessen...

:)

Medlem sedan aug. 20021 752 inlägg
#7

Det är som i vilken dator som hellst. Binära operationer.
Här är lite länkar som jag bara har tagit från ett arbeta jag skrev om binär multiplikation och division för några veckor sedan

Dawn Rorvik, ”2's Complement Representation for Signed Integers”
http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm

Michael Schulte, ”Binary Multiplication & Division”
http://www.eecs.lehigh.edu/~mschulte/ece201-99/lect/lect8

Cherrybrook Technology High School, ”Binary Multiplication”
http://www.cths.nsw.edu.au/learning/tas/ict/sdd/binary/times.htm

Cherrybrook Technology High School, ”Binary Division”
http://www.cths.nsw.edu.au/learning/tas/ict/sdd/binary/division.htm

Math Forum, “Binary Operations”
http://mathforum.org/library/drmath/view/55794.html

Math Forum, “Multiplying and Dividing Computer Style”
http://mathforum.org/library/drmath/view/54338.html

Math Forum, “Long Division in Binary”
http://mathforum.org/library/drmath/view/55951.html

Kanske kan ge dig en inblik i hur det går till, men du ska nog framförallt titta på hur en processor fungerar, då får du svaret automatiskt.

/Viktor

Medlem sedan aug. 2001458 inlägg
#8

Titan skrev:

Man kan helt enkelt plocka värden från internminnet (en viss minnesposition som förmodligen väldigt sällan har samma värde på olika datorer) så funkar det t.ex. om du skapar en variabel utan att tilldela den ett startvärde i vissa programmeringsspråk

Jag skulle inte rekommendera detta. Använder du Microsoft-kompilatorn i debug-builds kommer stack-variabler initieras till 0xCC, medan de i release-builds är oiniterade. Andra kompilatorer kan ge andra liknande beteenden. Man kan inte förlita sig på detta som slumptal.

Medlem sedan juli 2002581 inlägg
#9

Det finns hårdvara som ger 100% äkta slumptal.

PGP använde sig av musrörelser och tangentbordstrycknignar för att skapa den privata nyckeln.

Medlem sedan sep. 20025 507 inlägg
#10

Hur fungerar en miniräknare? Själva räkneprocessen...

Räknarna och datorerna använder sig av Maclaurin-/Taylor-polynom för att räkna ut exempelvis e, pi och sinusfunktionerna. Det är en serie med tal uppbyggda för att approximera funktioner och värden.

Medlem sedan juli 2002581 inlägg
#11

Mr. N. skrev:

Hur fungerar en miniräknare? Själva räkneprocessen...

Räknarna och datorerna använder sig av Maclaurin-/Taylor-polynom för att räkna ut exempelvis e, pi

Nu är det nog iofs så att e och pi är fördefinierade konstanter.

Medlem sedan sep. 20025 507 inlägg
#12

Ja, just det, det gäller snarare funktioner som e^()...

Medlem sedan nov. 20029 inlägg
#13

jag tycker att matte diskret är ett rätt bra ämne för den som är intresserad av sånthär!

140 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)