/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
Tilfældigt udfald - 1 eller 2
Fra : Jesper Stocholm


Dato : 13-12-01 21:32

Hvis jeg har ne funktion Rnd(), der giver et tilfældigt tal ligeligt
fordelt imellem 0 og 1 (dvs standard tilfældighedsfunktion) og så anvender
den som:

Udfald = floor(2*Rnd()+1)+1

Vil det så give mig enten 1 eller 2 ... hver med sandsynligheden 50% ?


Min intiution siger mig, at det ikke er tilfældet ... men jeg kan ikke helt
gennemskue det.

Et andet bud er

Udfald = floor(100*Rnd()) mod 2

Hvad med dette ?

pft

--
Jesper Stocholm
http://stocholm.dk

 
 
Henning Makholm (13-12-2001)
Kommentar
Fra : Henning Makholm


Dato : 13-12-01 21:47

Scripsit Jesper Stocholm <spam@stocholm.dk>

> Hvis jeg har ne funktion Rnd(), der giver et tilfældigt tal ligeligt
> fordelt imellem 0 og 1 (dvs standard tilfældighedsfunktion) og så anvender
> den som:

> Udfald = floor(2*Rnd()+1)+1

> Vil det så give mig enten 1 eller 2 ... hver med sandsynligheden 50% ?

Næh - så vidt jeg kan se vil den give enten 2 eller 3, hver med
sandsynligheden 50%. Afhængig af afrundingen er der måske også en
infinitesimal sansynligned for 4.

> Et andet bud er

> Udfald = floor(100*Rnd()) mod 2

> Hvad med dette ?

Giver enten 0 eller 1.

--
Henning Makholm "# good fish ...
# goodfish, goodfish ...
# good-good FISH! #"

Jesper Harder (13-12-2001)
Kommentar
Fra : Jesper Harder


Dato : 13-12-01 22:45

Jesper Stocholm <spam@stocholm.dk> writes:

> Hvis jeg har ne funktion Rnd(), der giver et tilfældigt tal ligeligt
> fordelt imellem 0 og 1 (dvs standard tilfældighedsfunktion) og så anvender
> den som:
>
> Udfald = floor(2*Rnd()+1)+1
>
> Vil det så give mig enten 1 eller 2 ... hver med sandsynligheden 50% ?

Nej, det skal være:

udfald = 1 + floor(2.0*rnd())

> Et andet bud er
>
> Udfald = floor(100*Rnd()) mod 2
>
> Hvad med dette ?

Det er en dårlig idé, fordi det er meget almindeligt at de mindst
betydende bits er meget mindre tilfældige end de mest betydende.

Henning Makholm (13-12-2001)
Kommentar
Fra : Henning Makholm


Dato : 13-12-01 23:58

Scripsit Jesper Harder <harder@myrealbox.com>
> Jesper Stocholm <spam@stocholm.dk> writes:

> > Udfald = floor(100*Rnd()) mod 2

> Det er en dårlig idé, fordi det er meget almindeligt at de mindst
> betydende bits er meget mindre tilfældige end de mest betydende.

Det var også min første tanke - men her er der jo ikke tale om de
mindst betydende bits i det rå tilfældige tal. Ovenstående tror jeg
man skal være svært uheldig for at finde et mønster i.

--
Henning Makholm "I paid off ALL my debts and bought a much-needed new car."

Richard Thordsen (15-12-2001)
Kommentar
Fra : Richard Thordsen


Dato : 15-12-01 11:58

>
>Nej, det skal være:
>
> udfald = 1 + floor(2.0*rnd())
>


Eller bare:

udfald = 1 + round( rnd() )


Jonas Kongslund (13-12-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 13-12-01 23:30

Jesper Stocholm wrote:

> Hvis jeg har ne funktion Rnd(), der giver et tilfældigt tal ligeligt
> fordelt imellem 0 og 1 (dvs standard tilfældighedsfunktion) og så anvender
> den som:
>
> Udfald = floor(2*Rnd()+1)+1
>
> Vil det så give mig enten 1 eller 2 ... hver med sandsynligheden 50% ?
>
>
> Min intiution siger mig, at det ikke er tilfældet ... men jeg kan ikke
> helt gennemskue det.
>
> Et andet bud er
>
> Udfald = floor(100*Rnd()) mod 2

Det er ikke et emne jeg vil gøre mig klog på, men Donald Knuth har skrevet
om generering af pseudotilfældige tal i The Art of Computer Programming,
vol. 2. Han kommer også ind på hvordan man laver pseudotilfældige tal, som
skal ligge i en lille mængde, f.eks. {0,1}. Det er vist ikke helt så
trivielt at gøre dette - der skal i hvert fald lidt teori til.

--
Jonas Kongslund <jonas(at)kongslund.dk> XNS: =Jonas Kongslund

When you want to change the world, you don't see the dawn by
getting up early - you see it by not sleeping through the night.

Jeppe Stig Nielsen (17-12-2001)
Kommentar
Fra : Jeppe Stig Nielsen


Dato : 17-12-01 17:27

Jonas Kongslund wrote:
>
>[...] Han kommer også ind på hvordan man laver pseudotilfældige tal, som
> skal ligge i en lille mængde, f.eks. {0,1}. Det er vist ikke helt så
> trivielt at gøre dette - der skal i hvert fald lidt teori til.

Kan man ikke bare simulere bevægelsesligningerne for et møntkast?

--
Jeppe Stig Nielsen <URL:http://jeppesn.dk/>. «

"Je n'ai pas eu besoin de cette hypothèse (I had no need of that
hypothesis)" --- Laplace (1749-1827)

Jesper Harder (14-12-2001)
Kommentar
Fra : Jesper Harder


Dato : 14-12-01 03:28

Henning Makholm <henning@makholm.net> writes:

> Scripsit Jesper Harder <harder@myrealbox.com>
>> Jesper Stocholm <spam@stocholm.dk> writes:
>
>> > Udfald = floor(100*Rnd()) mod 2
>
>> Det er en dårlig idé, fordi det er meget almindeligt at de mindst
>> betydende bits er meget mindre tilfældige end de mest betydende.
>
> Det var også min første tanke - men her er der jo ikke tale om de
> mindst betydende bits i det rå tilfældige tal. Ovenstående tror jeg
> man skal være svært uheldig for at finde et mønster i.

Jeg kan heller ikke lige gennemskue, hvorfor det opstår; men det er
åbenbart den Konventionelle Visdom:

,----[ Press et al., /Numerical Recipes/ ]
|
| Correlations in k-space is not the only weakness of linear congruential
| generators. Such generators often have their low-order (least
| significant) bits much less random than their high-order bits. If you
| want to generate a random integer between 1 and 10, you should always do
| it by
|
| j := 1 + trunc(10.0*Random);
|
| and never by anything resembling
|
| j := 1 + (trunc(1000000.0*Random) mod 10);
|
| (which uses lower-order bits).
`----

Henning Makholm (14-12-2001)
Kommentar
Fra : Henning Makholm


Dato : 14-12-01 10:41

Scripsit Jesper Harder <harder@myrealbox.com>
> Henning Makholm <henning@makholm.net> writes:
> > Scripsit Jesper Harder <harder@myrealbox.com>
> >> Jesper Stocholm <spam@stocholm.dk> writes:

> >> > Udfald = floor(100*Rnd()) mod 2

> >> Det er en dårlig idé, fordi det er meget almindeligt at de mindst
> >> betydende bits er meget mindre tilfældige end de mest betydende.

> > Det var også min første tanke - men her er der jo ikke tale om de
> > mindst betydende bits i det rå tilfældige tal. Ovenstående tror jeg
> > man skal være svært uheldig for at finde et mønster i.

> Jeg kan heller ikke lige gennemskue, hvorfor det opstår; men det er
> åbenbart den Konventionelle Visdom:

Det er også rigtigt nok at de laveste bits i det rå tilfældige tal
ikke er særlig tilfældige. Min pointe var at det ikke er de bits der
bliver brugt ovenfor.

--
Henning Makholm "Jeg mener, at der eksisterer et hemmeligt
selskab med forgreninger i hele verden, som
arbejder i det skjulte for at udsprede det rygte at
der eksisterer en verdensomspændende sammensværgelse."

Per Abrahamsen (17-12-2001)
Kommentar
Fra : Per Abrahamsen


Dato : 17-12-01 12:46

Henning Makholm <henning@makholm.net> writes:

[ floor(100*Rnd()) mod 2 ]

> Min pointe var at det ikke er de bits der bliver brugt ovenfor.

Og det rør dig ikke at numerical recipes efter Jespers citat
tilsyneladende mener det netop er de bits der bliver brugt i
eksemplet?

Bertel Lund Hansen (17-12-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-12-01 13:24

Per Abrahamsen skrev:

>[ floor(100*Rnd()) mod 2 ]

>> Min pointe var at det ikke er de bits der bliver brugt ovenfor.

>Og det rør dig ikke at numerical recipes efter Jespers citat
>tilsyneladende mener det netop er de bits der bliver brugt i
>eksemplet?

Det må bero på en misforståelse. Hvis Rnd() er et helt tal, vil
mod 2 aflevere den mindst betydende bit. Hvis Rnd(), som her, er
en float, vil mod 2 blive taget på et decimaltal, hvilket umuligt
kan resultere i at man får fat i den mindst betydende bit.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Henning Makholm (17-12-2001)
Kommentar
Fra : Henning Makholm


Dato : 17-12-01 13:26

Scripsit Per Abrahamsen <abraham@dina.kvl.dk>
> Henning Makholm <henning@makholm.net> writes:

> [ floor(100*Rnd()) mod 2 ]

> > Min pointe var at det ikke er de bits der bliver brugt ovenfor.

> Og det rør dig ikke at numerical recipes efter Jespers citat
> tilsyneladende mener det netop er de bits der bliver brugt i
> eksemplet?

Hvis du mener

| and never by anything resembling
|
| j := 1 + (trunc(1000000.0*Random) mod 10);
|
| (which uses lower-order bits).
`----

synes jeg der er væsentlig forskel på 100 og 1000000. Jeg kan godt
forestille mig en uambitiøs lineær-kongruens-generator der kun har
nogen få bit mere end 20, så multiplikationen med 1e6 bringer de
nederste bit frem i lyset - men jeg kan ikke forestille mig at en bare
lidt alvorligt ment random-generator skulle få problemer ved at blive
delt i 100 dele.

Desuden vil jeg regne med at

trunc(1000000.0*Random)

nok skal læses som dæknavn for "den smart biblioteksfunktion du lige
har fundet der laver et tilfældigt heltal mellem 0 og en enormt stor
overgrænse".

--
Henning Makholm "I, madam, am the Archchancellor!
And I happen to run this University!"

Søg
Reklame
Statistik
Spørgsmål : 177506
Tips : 31968
Nyheder : 719565
Indlæg : 6408561
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste