|
| 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!"
| |
|
|