Avatar billede pbudk Nybegynder
26. marts 2002 - 11:43 Der er 13 kommentarer og
1 løsning

Uniform fordelt tilfældigt tal

Hej

Jeg skal bruge en funktion til at udtrække et tilfældigt tal i Delphi.

Tallet skal være uniform fordelt, dvs. sandsynligheden for at et givet heltal bliver udtrukket er lige stor for alle mulige udfald.

Er der nogen der kan hjælpe mig ?

/pbudk
Avatar billede stoney Nybegynder
26. marts 2002 - 11:46 #1
kig på random

Stoney
Avatar billede stoney Nybegynder
26. marts 2002 - 11:47 #2
label1.Caption := IntToStr(Random(6)+1);

vælger et tal mellme 1 og 6

Stoney
Avatar billede pbudk Nybegynder
26. marts 2002 - 11:51 #3
Tak for den hurtige respons.

Det var også den jeg havde kig på, jeg ville bare gerne sikre mig 100%, at den var uniform fordelt.

Er der noget sted hos inprise, hvor man kan se, "specifikationer" for de indbyggede funktioner i Delphi ?

/pbudk
Avatar billede stoney Nybegynder
26. marts 2002 - 11:58 #4
Nu ved jeg ikke lige hvad du mener med specifikationer,
men hjælpen i Delphi er rimelig omfattende/beskrivende.

Stoney
Avatar billede pbudk Nybegynder
26. marts 2002 - 12:07 #5
Jeg ville bare gerne se feks. fordelingsfunktionen for rand(), så jeg selv kunne sikre mig, at den nu også var uniform fordelt (eller at det feks. var en Bernoulli process)

Men mon ikke den er god nok :o)

Du får pointene.
Avatar billede lanstorp Nybegynder
26. marts 2002 - 12:25 #6
Jeg er overbevist om, at ingen statistisk metode ville kunne bevise at tallene ikke er tilfældigt fordelt af Delphis random generator. Nu ligger der selvfølglig en algoritme bag, så tilfældigt er det ikke ;-). Det kan bare ikke bevises statistisk.....Men det ville være interessant at se denne algoritme, samt vide hvad Borland bruger som "seed", = det første tal i deres random algoritmen. Hvis "frøet" er ens er tilfældet det også.
Avatar billede lanstorp Nybegynder
26. marts 2002 - 12:26 #7
- og dermed ikke tilfældig....
Avatar billede pbudk Nybegynder
26. marts 2002 - 12:46 #8
lanstort >> Lige nøjagtig, og det var netop den bagved liggende algoritme jeg gerne ville have set
Avatar billede lanstorp Nybegynder
26. marts 2002 - 13:11 #9
Også jeg. Men man kan jo altid lave sin egen tilfældighedsalgoritme:
Start med et 4-cifret frø. Gang tallet med sig selv. Tag fra resultatet de fire midterste tal. Gang dette tal med sig selv. Tag fra resultatet de fire midterste tal osv... Denne metode kan heller ikke påvises ikke at være statistik tilfældig. Problemet er vel altid at få et tilfældigt frø (hvad kom først hønen eller æget), men man kan måske bruge systemtiden gange med dato og så tage fire tal derfra. Et ganske interessant emne da der jo ikke findes noget der er tilfældigt i denne verden (højest uregneligt og kaotisk), derfor kalder man det vel også stokastisk i statistisk sammenhæng.
Avatar billede pbudk Nybegynder
26. marts 2002 - 13:27 #10
hm - jeg tror jeg vil have gang i min gamle statistik bog og udforske det lidt nærmere. (det ligger jo lidt langt væk, når man ikke arbejder med det dagligt ;o) )

Det er ikke utænkeligt, at jeg vælger at tage udgangspunkt i den manuelle metode som du - lanstorp - har opskrevet. Det giver mig i hvert fald en idé om, hvordan tallene er fremkommet. Hvilket jo må siges at være lettere "uforklarligt" med Delphi's egen.

Skal jeg smide lidt point til dig ?
Avatar billede pbudk Nybegynder
26. marts 2002 - 13:31 #11
Fandt lige det her: Godtnok til turbo pascal, men mon ikke de har genbrugt metoden i Delphi ?

TN619D.txt  RANDOM RANDOMIZE - RANDOM NUMBER GENERATOR FORMULA
Category  :Pascal
Platform    :All
Product    :Turbo Pascal  4.0+

Description:
Q. What is the formula used by the random number generator in
  Turbo Pascal?
A. The random number generator in Turbo Pascal uses 32-bit
  arithmetic.  It maintains a 32-bit 'seed', which is treated as
  an unsigned integer.  Each call to Random changes the seed by
  the formula seed:=multiplier * seed + 1 mod 4294967296 Turbo
  Pascal uses the multiplier, 134775813.  The modulus,
  4294967296, is 2 to the power 32.  The multiplier was chosen
  carefully for its nice randomness properties.  The seed will
  take on every 32-bit integer before repeating.
Avatar billede lanstorp Nybegynder
26. marts 2002 - 13:48 #12
Modulus 4294967296 ha ha... det er nok den sidste af de intelligenstest man får på session. Interessant kode. Prøver ved lejlighed at lave en random-generator selv. Det er vel bare at lave et histogram over et par billioner kørsler og se om man kan stikke Delphis algoritme. Men gad vide hvor de støver frøet op, det kan vel næsten kun være fra systemtiden.
Er du interesseret i noget af problematikken kan bogen af Murray Gell-Mann: "Kvarken og Jaguaren" anbefales. Han diskuterer blandt andet det at rette i tilfældige tal så de bliver mere tilfældigt samt meget anden ...
Behold bare dine point - Selvom jeg stadig mangler at få de første :-)
Avatar billede pbudk Nybegynder
26. marts 2002 - 14:01 #13
ok - tusind tak for hjælpen :o)
Avatar billede delphi Nybegynder
26. marts 2002 - 18:13 #14
Koden til Delphis random Seed generator (Randomize) findes System.Pas.  Kort fortalt går den ud på:

- Aflæs system tid.
- Seed = ((Timer * 60 + min) * 60 + Sek) * 1000 + mSek

Random funktionen er, så vidt jeg ved, basalt set stadig som i de gamle TP dage (beskrevet ovenfor).

NiP
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
Kurser inden for grundlæggende programmering

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