Avatar billede simon_jacobsen Nybegynder
13. januar 2004 - 21:33 Der er 14 kommentarer og
1 løsning

hvordan finder computeren et tilfældig tal

hvordan generere computeren et tilfældigt til mellem 0 og 1 ?
jeg søger et link til en side der beskriver hvordan man har løst dette problem fatter nemlig ikke lige hvordan functionen man kalder virker, computere kan jo kun lave ting som følger matematiske "love", håber nogen kan hjælpe mig ...

På Forhånd Tak :)
Avatar billede simon_jacobsen Nybegynder
13. januar 2004 - 21:35 #1
måske skulle jeg have sat det her indlæg under software ...
Avatar billede Slettet bruger
13. januar 2004 - 21:37 #2
Mener heller ikke computeren kan generer et tilfældigt tal uden noget specielt hardware, men den regner det ud, udfra f.eks. klokken.

Men er ikke helt sikker :)
Avatar billede erikjacobsen Ekspert
13. januar 2004 - 21:40 #3
Avatar billede Slettet bruger
13. januar 2004 - 21:40 #4
Måske er der noget her du kan bruge:

http://www.random.org/
Avatar billede arne_v Ekspert
13. januar 2004 - 21:42 #5
Der er to slags tilfældige tal:

1)  ægte tilfældige tal

De kræver noget fysisk udefra.

Man kan koble en geiger tæller på og bruge målingen fra en radioaktiv kilde.

Jeg har set et kommercielt produkt med en lava lampe (du læste rigtigt) som
man tog et digital billede af og udregnede en hash af.

2)  pseudo tilfældige tal

Baserer sig på en matematisk algoritme.

Ethvert tal er givet udfra state. Og måden state ændrer sig på
er også givet.

Men statistiske har tallene egenskaber ligesom tilfældige tal.

Det kritiske er her så at vælge en god start state.

Ofte brugern bare tiden som seed.

Hvis du vil vide mere om algoritmerne kan jeg forklare *meget* om
dette interessante emne.
Avatar billede redhat9user Nybegynder
13. januar 2004 - 21:54 #6
Jeg har været med til at bruge en hvid støjsgenerator til at toggle en flip-flop. Et antal bit herfra blev benyttet som seed til en pseudo-random generator, som sikrede at verden kørte videre selvom støjgeneratoren skulle gå i stå. Det virkede ganske godt.
Avatar billede simon_jacobsen Nybegynder
13. januar 2004 - 21:55 #7
jeg har hørt at man i nogle linux distributioner skal vælge et random module der skal generere tilfældige tal.
men den "normale" metode til at finde et tilfældigt tal, hvad er det hvis man kan sige en metode er "normal", hvad benytter windows f.eks. til at generere et tilfældigt tal, er det en hardware del eller en algoritme ?
og hvis det er en algoritme, hvordan kan det så lade sig gøre at generere et tilfældigt tal med matematik, det vil jeg mene at det ikke kan, medmindre man bruger brugeren input til at generere ud fra ...
Avatar billede simon_jacobsen Nybegynder
13. januar 2004 - 21:58 #8
arne_v > du må gerne beskrive en af disse algoritme ... hvis du gider :)
Avatar billede arne_v Ekspert
13. januar 2004 - 22:00 #9
Her er en af de klassiske algoritmer implementeret i C:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static unsigned long int seed;

void mysrand(unsigned long int ss)
{
  seed=ss;
  return;
}

unsigned long int myrand()
{
  seed=(16807*seed) % 2147483647;
  return seed;
}

int main(int argc,char *argv[])
{
  int i;
  mysrand(time(NULL));
  for(i=0;i<10;i++) {
      printf("%ld\n",myrand());
  }
  exit(0);
}

(inklusive et test program som bruger tiden som seed)
Avatar billede arne_v Ekspert
13. januar 2004 - 22:03 #10
Den kaldes også for "Minimal Standard" algoritmen.

Den stammer oprindeligt fra Lewis, Goodman & Miller 1969, men
fik sit navn af Park & Miller CACM Oct 1988.

Den bruges (har været brugt ?) af IMSL og MATLAB.
Avatar billede simon_jacobsen Nybegynder
13. januar 2004 - 22:03 #11
rimelig langhåret, men ser da ud til at være til at analysere :)
takker :)
Avatar billede arne_v Ekspert
13. januar 2004 - 22:04 #12
Det er en såkaldt MLCG algoritme.

Pseudo random number generatorer er faktisk et af de områder, hvor der er
sket meget store fremskridt de sidste 15 år.
Avatar billede arne_v Ekspert
13. januar 2004 - 22:06 #13
Personligt er jeg glad for algoritmer af L'Ecuyer.

Et andet C eksempel:

#include <stdio.h>
#include <stdlib.h>

static unsigned long int seed[5];

void mysrand(unsigned long int ss[])
{
  seed[0]=ss[0];
  seed[1]=ss[1];
  seed[2]=ss[2];
  seed[3]=ss[3];
  seed[4]=ss[4];
  return;
}

unsigned long int myrand()
{
  unsigned long int res;
  int i;
  res=(107374182*seed[0]+104480*seed[4])%2147483647;
  seed[4]=seed[3];
  seed[3]=seed[2];
  seed[2]=seed[1];
  seed[1]=seed[0];
  seed[0]=res;
  return res;
}

int main(int argc,char *argv[])
{
  unsigned long int ss[5];
  int i;
  ss[0]=1234567;
  ss[1]=123;
  ss[2]=4444;
  ss[3]=987;
  ss[4]=12321;
  mysrand(ss);
  for(i=0;i<10;i++) {
      printf("%ld\n",myrand());
  }
  exit(0);
}
Avatar billede arne_v Ekspert
13. januar 2004 - 22:06 #14
En 5. ordens MRG fra L'Ecuyer & Blouin & Coutre ACM Simulations 1993.
Avatar billede simon_jacobsen Nybegynder
13. januar 2004 - 22:08 #15
tak skal have.
har nu mere en rigeligt stof til eftertanke :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester