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