
hur programmerar man egentligen slump?!?
SV: hur programmerar man egentligen slump?!?
kan du prova? 

SV: hur programmerar man egentligen slump?!?
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...
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...
- Urban Anjar
- Inlägg: 7306
- Blev medlem: 05 nov 2006, 22:59
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Vickleby
- Kontakt:
SV: hur programmerar man egentligen slump?!?
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.HR skrev: Borde inte dessutom takten på sönderfallet minska med tiden?
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...
Ubuntu från början: http://ubuntufranborjan.wordpress.com/
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
- Bossieman
- Inlägg: 2704
- Blev medlem: 27 dec 2006, 23:11
- OS: Ubuntu
- Utgåva: 16.04 Xenial Xerus LTS
- Ort: Göteborg
- Kontakt:
SV: hur programmerar man egentligen slump?!?
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.

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.
Senast redigerad av 1 Bossieman, redigerad totalt 19 gånger.
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
SV: hur programmerar man egentligen slump?!?
Jag är nu ingen matematiker men 1/oo=0?Bossieman skrev:
...
1/oo=0
...
Då borde ju 0 * oo = 1 och de är ju de inte?
- Bossieman
- Inlägg: 2704
- Blev medlem: 27 dec 2006, 23:11
- OS: Ubuntu
- Utgåva: 16.04 Xenial Xerus LTS
- Ort: Göteborg
- Kontakt:
SV: hur programmerar man egentligen slump?!?
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.Luskan skrev:Jag är nu ingen matematiker men 1/oo=0?Bossieman skrev:
...
1/oo=0
...
Då borde ju 0 * oo = 1 och de är ju de inte?
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
SV: hur programmerar man egentligen slump?!?
oo/liggande 8 är oändlighet va?
- Bossieman
- Inlägg: 2704
- Blev medlem: 27 dec 2006, 23:11
- OS: Ubuntu
- Utgåva: 16.04 Xenial Xerus LTS
- Ort: Göteborg
- Kontakt:
SV: hur programmerar man egentligen slump?!?
JaGalgalid skrev: oo/liggande 8 är oändlighet va?
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
SV: hur programmerar man egentligen slump?!?
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

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
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
SV: hur programmerar man egentligen slump?!?
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.
- Mekaniserad Apelsin
- Hedersmedlem
- Inlägg: 3777
- Blev medlem: 27 maj 2006, 12:24
- OS: Ubuntu
- Ort: Stockholm
- Kontakt:
SV: hur programmerar man egentligen slump?!?
Och eftersom datorer inte kan hantera oändligt bitdjup (dvs hur många decimaler som helst) så finns det ett ändligt antal utfall.
More Mekaniserad at http://blippe.se.
SV: hur programmerar man egentligen slump?!?
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...
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;
}
Senast redigerad av 1 gasol, redigerad totalt 27 gånger.
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
- Bossieman
- Inlägg: 2704
- Blev medlem: 27 dec 2006, 23:11
- OS: Ubuntu
- Utgåva: 16.04 Xenial Xerus LTS
- Ort: Göteborg
- Kontakt:
SV: hur programmerar man egentligen slump?!?
Du blandar in verkligheten juLars 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.

*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
SV: hur programmerar man egentligen slump?!?
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?!?
Kvantmekanik och vardagslogik (som a eller icke-a) går inte hand i hand heller.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.
Det är ett annat sätt att tänka som vi inte är vana vid.
⊲ஜ௹ஔ௵ௌூ⊳
SV: hur programmerar man egentligen slump?!?
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
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
-
- Inlägg: 232
- Blev medlem: 11 dec 2006, 21:09
- OS: Ubuntu
- Utgåva: 10.04 Lucid LTS
- Ort: Sweden
- Kontakt:
SV: hur programmerar man egentligen slump?!?
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å bordetLars 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.

-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
SV: hur programmerar man egentligen slump?!?
Vad du var petig då
Jo, jag tänkte mig en viss punkt på tärningen.

SV: hur programmerar man egentligen slump?!?
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.

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.
- Mekaniserad Apelsin
- Hedersmedlem
- Inlägg: 3777
- Blev medlem: 27 maj 2006, 12:24
- OS: Ubuntu
- Ort: Stockholm
- Kontakt:
SV: hur programmerar man egentligen slump?!?
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.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.
More Mekaniserad at http://blippe.se.