Sida 3 av 4
SV: hur programmerar man egentligen slump?!?
Postat: 17 jul 2007, 13:35
av Galgalid
kan du prova?

SV: hur programmerar man egentligen slump?!?
Postat: 17 jul 2007, 14:21
av Chippen
Jag gissar: Tror att man mäter intervall mellan sönderfall och vart sönderfallet sker (det sistnämnda är jag osäker på)
Och jo det borde avta, men hur fort det avtar beror ju förståss på vad som sönderfaller, dock kanske det inte är intressant hurvida det avtar eller ej om beroende på vad man mäter...
SV: hur programmerar man egentligen slump?!?
Postat: 17 jul 2007, 14:21
av Urban Anjar
HR skrev:
Borde inte dessutom takten på sönderfallet minska med tiden?
Jo, ämnet har ju sin halveringstid. Den kan iofs vara väldigt lång för vissa isotoper. Har för mig att den som används i brandvarnare Am-någonting har en halveringstid i storleksordningen miljoner år och då kan man kanske bortse ifrån den.
Kosmisk strålning är å andra sidan inget lyckat eftersom den lär vara klart periodisk och kopplad till solfläcksaktivitet...
Men vad ska vi ha slumpen till? För normala tillämpningar, låt oss säga ett spel torde de vanliga pseudoslumptalen, med lämpligt frö, vara fullt tillräckligt slumpmässiga.
Annars är väl datorernas stora fördel (iaf om man kör Linux) att de är hyggligt deterministiska...
SV: hur programmerar man egentligen slump?!?
Postat: 19 jul 2007, 07:24
av Bossieman
Nu har de tydligen fått fram en äkta slumpgenerator
http://random.irb.hr/
Har inte läst hur den fungerar men jag undrar hur den får fram numret? Det finns ett oändligt antal tal, om ett av dessa oändliga tal ska väljas ut så är sannolikheten att det just blir talet:
1/oo=0
Den måste fortfarande ha ett ändligt utfallsrum.
SV: hur programmerar man egentligen slump?!?
Postat: 23 jul 2007, 23:47
av Luskan
Bossieman skrev:
...
1/oo=0
...
Jag är nu ingen matematiker men 1/oo=0?
Då borde ju 0 * oo = 1 och de är ju de inte?
SV: hur programmerar man egentligen slump?!?
Postat: 24 jul 2007, 00:32
av Bossieman
Luskan skrev:
Bossieman skrev:
...
1/oo=0
...
Jag är nu ingen matematiker men 1/oo=0?
Då borde ju 0 * oo = 1 och de är ju de inte?
Det går att visa det med gränsvärden, man har då helt enkelt 1/E och låter sedan E gå mot oo.
SV: hur programmerar man egentligen slump?!?
Postat: 24 jul 2007, 00:35
av Galgalid
oo/liggande 8 är oändlighet va?
SV: hur programmerar man egentligen slump?!?
Postat: 24 jul 2007, 00:43
av Bossieman
Galgalid skrev:
oo/liggande 8 är oändlighet va?
Ja
SV: hur programmerar man egentligen slump?!?
Postat: 24 jul 2007, 01:45
av Galgalid
det är nice
men hur vi än försöker går det inte att få fram riktigt slump, eftersom allt kan förutsägas. Vi kan dock göra chansen att förutsäga rätt riktigt liten
SV: hur programmerar man egentligen slump?!?
Postat: 24 jul 2007, 10:04
av Lars
Observera att även om sannolikheten är noll för ett givet utfall så kan det ändå inträffa. Tänk er att ni kastar en tärning på ett bord, sannolikheten att den faller på en given koordinat (x,y) är 0², men trots det kommer den ju att landa på någon koordinat. Om man däremot delar in bordet i ett rutnät med μm-stora rutor så kommer sannolikheten att tärningen ska hamna inom en viss ruta att vara > 0.
SV: hur programmerar man egentligen slump?!?
Postat: 24 jul 2007, 15:20
av Mekaniserad Apelsin
Och eftersom datorer inte kan hantera oändligt bitdjup (dvs hur många decimaler som helst) så finns det ett ändligt antal utfall.
SV: hur programmerar man egentligen slump?!?
Postat: 27 jul 2007, 15:38
av gasol
Här är en enkel implementation i C av en slumpgenerator jag och en kursare gjorde på en kurs vi läste (den var dock i matlab's .m kod)
Men man kan ändå se hur pass enkel en slumptals generator kan vara att skriva, dock så är den inte perfekt, utan som alla pseudo slumptals generatorer så avviker den till en viss mån. Inga flaggor behövs för att kompilera.
Ett argument tas, ett heltals seed värde, här kan man se att om man använder samma seed så kommer samma tal att genereras.
Enjoy...
Kod: Markera allt
#include <stdio.h>
#include <stdlib.h>
#define m 1073741824
#define b 32
#define a 513
#define NUM 30
static unsigned long int __seed;
void set_seed(unsigned int s) {
__seed = s;
}
int my_rand() {
__seed = ((a * __seed) + b);
return (__seed % m);
}
float my_rand_f() {
__seed = ((a * __seed) + b);
return (__seed % m) / (float)m;
}
int main(int argc, char **argv) {
unsigned int i;
if(argc < 2) {
printf("Du måste ange ett seed värde\n");
return 1;
}
set_seed(atoi(argv[1]));
for(i = 0; i < NUM; i++) {
printf("rand[%d] = %d\n", i, my_rand());
}
for(i = 0; i < NUM; i++) {
printf("randf[%d] = %f\n", i, my_rand_f());
}
return 0;
}
SV: hur programmerar man egentligen slump?!?
Postat: 27 jul 2007, 15:47
av Bossieman
Lars skrev:
Observera att även om sannolikheten är noll för ett givet utfall så kan det ändå inträffa. Tänk er att ni kastar en tärning på ett bord, sannolikheten att den faller på en given koordinat (x,y) är 0², men trots det kommer den ju att landa på någon koordinat. Om man däremot delar in bordet i ett rutnät med μm-stora rutor så kommer sannolikheten att tärningen ska hamna inom en viss ruta att vara > 0.
Du blandar in verkligheten ju

SV: hur programmerar man egentligen slump?!?
Postat: 27 jul 2007, 16:50
av Zhaozhou
Alltså jag tror verkligen inte på detta.
Möjligtvis har de kommit på ett sätt att göra en "ännu mindre gissbart" nummer, men äkta slump känns väldigt osannolikt.
Numret måste ha en början, ett nummer kan inte bara "komma till" ur ingenting och vara complete random, den måste ha en logisk utgångspunkt.
SV: hur programmerar man egentligen slump?!?
Postat: 27 jul 2007, 18:07
av DrMario
Zhaozhou skrev:
Alltså jag tror verkligen inte på detta.
Möjligtvis har de kommit på ett sätt att göra en "ännu mindre gissbart" nummer, men äkta slump känns väldigt osannolikt.
Numret måste ha en början, ett nummer kan inte bara "komma till" ur ingenting och vara complete random, den måste ha en logisk utgångspunkt.
Kvantmekanik och vardagslogik (som a eller icke-a) går inte hand i hand heller.
Det är ett annat sätt att tänka som vi inte är vana vid.
SV: hur programmerar man egentligen slump?!?
Postat: 01 aug 2007, 22:50
av Seth
Detta är väl den vanligaste sättet att göra en "bra" slumpgenerator. Med bra menar jag att den är väl dokumenterad och dess egenskaper på så vis är kända.
Xi+1=aXi+b mod p
Denna startas då med att man ger X0 ett värde.
Finns sen vissa "regler" man ska följa för att den ska vara "bra"
1. välj p primtal
2. välj om möjligt a så att 001p<a<0.99p
3. välj b så att gcd(b,p)=1
4. X0 skall vara ett godtyckligt tal större än 0
5. använd endast p/1000 slumptal från samma generator
Sen håller jag med föregående talare om slumpens komplexitet
SV: hur programmerar man egentligen slump?!?
Postat: 07 aug 2007, 13:18
av jabbadoo
Lars skrev:
Observera att även om sannolikheten är noll för ett givet utfall så kan det ändå inträffa. Tänk er att ni kastar en tärning på ett bord, sannolikheten att den faller på en given koordinat (x,y) är 0², men trots det kommer den ju att landa på någon koordinat. Om man däremot delar in bordet i ett rutnät med μm-stora rutor så kommer sannolikheten att tärningen ska hamna inom en viss ruta att vara > 0.
det borde inte vara 0 eftersom täningen har en storlek... eller? Du kanske menar att en viss punkt på tärningen skulle komma på en viss punkt på bordet

SV: hur programmerar man egentligen slump?!?
Postat: 07 aug 2007, 13:22
av Lars
Vad du var petig då

Jo, jag tänkte mig en viss punkt på tärningen.
SV: hur programmerar man egentligen slump?!?
Postat: 05 okt 2007, 14:28
av mj
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.
SV: hur programmerar man egentligen slump?!?
Postat: 05 okt 2007, 14:46
av Mekaniserad Apelsin
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.
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.