hur programmerar man egentligen slump?!?

Här diskuteras programmering och utveckling
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: hur programmerar man egentligen slump?!?

Inlägg av Galgalid »

kan du prova? ;D
Användarvisningsbild
Chippen
Inlägg: 1237
Blev medlem: 05 jun 2006, 18:15
Ort: Haninge Kommun

SV: hur programmerar man egentligen slump?!?

Inlägg 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...
Användarvisningsbild
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?!?

Inlägg 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...
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#
Användarvisningsbild
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?!?

Inlägg av Bossieman »

Nu har de tydligen fått fram en äkta slumpgenerator  :o
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 *
*********************************************
Luskan
Inlägg: 20
Blev medlem: 13 jul 2007, 01:01

SV: hur programmerar man egentligen slump?!?

Inlägg 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?
Användarvisningsbild
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?!?

Inlägg 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.
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: hur programmerar man egentligen slump?!?

Inlägg av Galgalid »

oo/liggande 8 är oändlighet va?
Användarvisningsbild
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?!?

Inlägg av Bossieman »

Galgalid skrev: oo/liggande 8 är oändlighet va?
Ja
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
Användarvisningsbild
Galgalid
Inlägg: 1646
Blev medlem: 08 dec 2006, 12:30

SV: hur programmerar man egentligen slump?!?

Inlägg 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
Lars
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?!?

Inlägg 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.
Användarvisningsbild
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777
Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: hur programmerar man egentligen slump?!?

Inlägg 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.
More Mekaniserad at http://blippe.se.
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: hur programmerar man egentligen slump?!?

Inlägg 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;
}

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.
Användarvisningsbild
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?!?

Inlägg 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 :)
*********************************************
* Detta meddelande har granskats av FRA *
*********************************************
Zhaozhou
Inlägg: 183
Blev medlem: 03 jul 2007, 22:24
OS: Annat GNU/Linux
Kontakt:

SV: hur programmerar man egentligen slump?!?

Inlägg av Zhaozhou »

Bossieman skrev: Nu har de tydligen fått fram en äkta slumpgenerator  :o
http://random.irb.hr/
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.
Användarvisningsbild
DrMario
Inlägg: 62
Blev medlem: 28 feb 2007, 00:10
OS: Debian
Ort: Uppsala

SV: hur programmerar man egentligen slump?!?

Inlägg av DrMario »

Zhaozhou skrev:
Bossieman skrev: Nu har de tydligen fått fram en äkta slumpgenerator  :o
http://random.irb.hr/
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.
⊲ஜ௹ஔ௵ௌூ⊳
Seth
Inlägg: 8
Blev medlem: 29 jul 2007, 18:54

SV: hur programmerar man egentligen slump?!?

Inlägg 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
jabbadoo
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?!?

Inlägg 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 ???
Lars
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?!?

Inlägg av Lars »

Vad du var petig då :) Jo, jag tänkte mig en viss punkt på tärningen.
Användarvisningsbild
mj
Inlägg: 68
Blev medlem: 12 mar 2006, 21:08

SV: hur programmerar man egentligen slump?!?

Inlägg av mj »

Här är en kul grej ;D, 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.
Användarvisningsbild
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777
Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:

SV: hur programmerar man egentligen slump?!?

Inlägg av Mekaniserad Apelsin »

mj skrev: Här är en kul grej ;D, 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.
More Mekaniserad at http://blippe.se.
Skriv svar

Återgå till "Programmering och webbdesign"