/ 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ældige tal med 3 seeds
Fra : Georg Bagen Busk


Dato : 10-01-04 11:32

Jeg anvender i øjelibkket en generator af "tilfældige" tal som tager to
seeds. De seeds jeg anvender er koordinaterfor et punkt i 2d. Metoden giver
gode pseudo tilfældige tal, men jeg kan ikke formå at udvide den til at
virke med tre seeds. Hvis jeg tager min tredje værdi og forsøger at gange
den på med en faktor (også prim), så opstår der tydlige mønstre. Den metode
jeg anvender nu ser sådan ud...

double rand2(int x, int y) {
int n = x + y * 57;
n = (n<<13) ^ n;
double res = ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) &
0x7fffffff) / 1073741824.0);
res+=1;
res/=2;
return res;
}

For samme xy giver den samme værdi, hvilket er som ønsket. Hvordan udbygger
man den så den tager xyz istedet?
Min umidelbare teori var at beregne n som x +y*prim1 + z*prim2 hvor prim2 er
større end prim1, men det virker som sagt ikke rigtig for mig.

Hvad er iøvrigt det grundlæggende princip i denne generator? Jeg kan ikke
helt gennemskue hvordan den fungerer.
Bare det at bregne n=x+y*57 giver ikke en unik n for par af xy, da flere par
kan give samme n. Det kan undre at det tilsyneladende virker fint selvom xy
går i intervallet [0..1000].



 
 
Torben Brandt (10-01-2004)
Kommentar
Fra : Torben Brandt


Dato : 10-01-04 20:39

Georg Bagen Busk skrev:
> Jeg anvender i øjelibkket en generator af "tilfældige" tal som tager to
> seeds. De seeds jeg anvender er koordinaterfor et punkt i 2d. Metoden giver
> gode pseudo tilfældige tal, men jeg kan ikke formå at udvide den til at
> virke med tre seeds. Hvis jeg tager min tredje værdi og forsøger at gange
> den på med en faktor (også prim), så opstår der tydlige mønstre.

Hvornår har 57 været et primtal?

> Den metode jeg anvender nu ser sådan ud...
>
> double rand2(int x, int y) {
> int n = x + y * 57;
> n = (n<<13) ^ n;
> double res = ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) &
> 0x7fffffff) / 1073741824.0);
> res+=1;
> res/=2;
> return res;
> }
>
> For samme xy giver den samme værdi, hvilket er som ønsket. Hvordan udbygger
> man den så den tager xyz istedet?
> Min umidelbare teori var at beregne n som x +y*prim1 + z*prim2 hvor prim2 er
> større end prim1, men det virker som sagt ikke rigtig for mig.

Lidt kiggen rundt omkring giver et hint om noget, der kaldes Perlin
Noise, og tilsyneladende bruges til billedbehandling.
I den algoritme anvendes din funktion som tilfældighedsgenerator.

> Hvad er iøvrigt det grundlæggende princip i denne generator? Jeg kan ikke
> helt gennemskue hvordan den fungerer.

Jeg har omskrevet den lidt.
Nedenstående er R-kode [1] (kun syntaksen, det kan ikke køre :) ):
rand2 <- function(x, y) {
# omregner fra 2d til 1d
n <- x + 57 * y;
# laver et enormt stort tal, som ændrer sig meget,
# selv om n kun ændrer sig med 1
m <- (n * (2^13)) ^ n
# Vi sætter m ind i et 3. gradspolynomium
# Selv en lille ændring i m vil give meget forskellige
# funktionsværdier
a <- 15731 * m^3 + 789221 * m + 1376312589
# %% betyder "rest ved division"
# Vi tager de sidste (længst til højre) (ca.) 11 cifre
# Så deler vi det tal med 2^30
# Det giver at b ligger mellem 0 og 2
b <- (a %% 2^31-1) / 2^30
# Nu ligger c så mellem -1 og 1
c <- 1 - b
# Så ligger d mellem 0 og 2
d <- c + 1
# Så ligger e mellem 0 og 1
e <- d / 2
# e returneres
return( e )
}

Selve den del-algoritme der ud fra n giver e er formentlig en udmærket
tilfældighedsgenerator (dog er det måske lidt frås med alle de cifre man
smider væk når man går fra a til b.
I øvrigt kræver den at man kan regne med meget god præcision, da man har
meget store tal og man beholder de sidste cifre.
Spørgsmålet er så med omregningen fra 2d til 1d...

> Bare det at bregne n=x+y*57 giver ikke en unik n for par af xy, da flere par
> kan give samme n. Det kan undre at det tilsyneladende virker fint selvom xy
> går i intervallet [0..1000].

Hvis du laver noget i stil med Perlin Noise, så skal du sikkert bruge
denne funktion, men den er ikke så god til at give tilfældige tal...
Eksempel:
k <- 1
for (i in 0:999) {
for (j in 0:999) {
vektor[k] <- rand2(i, j)
k <- k + 1
}
}
I dette tilfælde er vektor periodisk (med periode 56999).

Hvis man i et 2d-billede (1000 x 1000 pixel) med ovenstående optegner
pixels hvor rand2 giver over f.eks. 0,999 så ses et tydeligt mønster.

Hvis du er ude at få en følge at (næsten) tilfældige tal (uden at lave
så meget bøvl) så du så bare til sprede ud i dit 2d- eller 3d-billede,
så kunne du se på "den multiplikative kongruens generator" [2].


[1] <URL:http://www.r-project.org/>
[2]
<URL:http://www.math.ku.dk/~erhansen/stat1MS_01/doku/rapport/opgave2.pdf>
nederst side 4. Sæt a = 7^5 og c = 2^31 - 1.


mvh Torben


Georg Bagen Busk (11-01-2004)
Kommentar
Fra : Georg Bagen Busk


Dato : 11-01-04 17:42

> Hvornår har 57 været et primtal?

Ja, den var mindre god Da tallet ikke havde nogen anden umidelbar
sammenhæng med noget gik jeg hurtigt ud fra at det var et primtal. Hvis x
kun går fra 0 til 56, så vil det at gange de 57 på naturligvis give unik
n-værdi for et xy par. Det er dog ikke tilfældet, så...

> > Hvad er iøvrigt det grundlæggende princip i denne generator? Jeg kan
ikke
> > helt gennemskue hvordan den fungerer.
>
> Jeg har omskrevet den lidt.

Takker for det. God forklaring af hvorfor de enkelte skridt tages.

> Hvis du laver noget i stil med Perlin Noise, så skal du sikkert bruge
> denne funktion, men den er ikke så god til at give tilfældige tal...
> Eksempel:
> k <- 1
> for (i in 0:999) {
> for (j in 0:999) {
> vektor[k] <- rand2(i, j)
> k <- k + 1
> }
> }
> I dette tilfælde er vektor periodisk (med periode 56999).


Jeg laver ikke en forberegnet støj, men en funktion som givet en 2d
koordinat returnerer værdien af støjfunktionen i det punkt. Hvad betyder k
<- 1?

> Hvis man i et 2d-billede (1000 x 1000 pixel) med ovenstående optegner
> pixels hvor rand2 giver over f.eks. 0,999 så ses et tydeligt mønster.

Ja, det er ved tegning af tal man nemmest ser perioderne. Jeg har nu mange
gange lavet tilfældige tal, som bare giver linier eller mønstre i
landskaberne.

> Hvis du er ude at få en følge at (næsten) tilfældige tal (uden at lave
> så meget bøvl) så du så bare til sprede ud i dit 2d- eller 3d-billede,
> så kunne du se på "den multiplikative kongruens generator" [2].

Fint link. Tager nok ikke skade af at læse lidt om det.

Imidlertid er mit behov lige nu bare at generere tilfældige tal med 3 seeds.
Jeg ville jo mene at
n=x+y*maxX+z*maxX*maxY og så køre løs burde virke, men i praksis har det
givet mønstre. Om maxX og maxY er er primtal gør ingen forskel. Det burde
det nu heller ikke.




Torben Brandt (11-01-2004)
Kommentar
Fra : Torben Brandt


Dato : 11-01-04 18:52

Georg Bagen Busk skrev:
>
> Jeg laver ikke en forberegnet støj, men en funktion som givet en 2d
> koordinat returnerer værdien af støjfunktionen i det punkt.
> Hvad betyder k <- 1?

"k <- 1" betyder "gem 1 i variablen k"

> Imidlertid er mit behov lige nu bare at generere tilfældige tal med 3
> seeds. Jeg ville jo mene at n=x+y*maxX+z*maxX*maxY og så køre
> løs burde virke, men i praksis har det givet mønstre.
> Om maxX og maxY er er primtal gør ingen forskel. Det burde
> det nu heller ikke.

Som jeg forstår det, så er det vi vil opnå en 3d-matrix (f.eks.
100x100x100), hvor hver indgang i matricen skal indeholde et tilfældigt
tal. [1]

Den måde jeg ville gøre det er, først at generere en vektor X med længde
100^3 som indeholder de tilfældige tal [2].
Og så have en funktion, der f.eks. hedder:
f(x,y,z) = plads nr x + 100*(y-1) + 100^2*(z-1) i X
Det er ligegyldigt hvordan den er defineret, bare det er en bijektiv
afbildning mellem matricen og vektoren X.

Den funktion der laver X skal ud fra et seed s være:
X_1 = g(s)
X_i = g(X_{i-1}) , i > 1
Her er g så den egentlig tilfældighedsgenerator, og forskellen i det du
bruger er, at X_i ikke er en funktion af i (ikke direkte i hvert fald).
Det er der jeg tror dit problem er.

De tilfældighedsgeneratorer jeg lige kan komme i tanke om gør at
a er tæt på b => g(a) er tæt på g(b)
[Eller på anden måde har en simpel sammenhæng]
Hvis man i stedet sætter genererer de to (eller flere) tilfældige tal som:
g(a) og g(g(a))
så bliver det meget sværere at finde sammenhængen.


[1] Måske vil du ikke i din algoritme have hele matricen på én gang, men
generere de tilfældige tal efterhånden som de skal bruges.
[2] Måske igen ikke på én gang.

mvh Torben


Georg Bagen Busk (11-01-2004)
Kommentar
Fra : Georg Bagen Busk


Dato : 11-01-04 19:32

> Som jeg forstår det, så er det vi vil opnå en 3d-matrix (f.eks.
> 100x100x100), hvor hver indgang i matricen skal indeholde et tilfældigt
> tal. [1]

Ja, det er en anden måde at beskrive det.

> Den måde jeg ville gøre det er, først at generere en vektor X med længde
> 100^3 som indeholder de tilfældige tal [2].
> Og så have en funktion, der f.eks. hedder:
> f(x,y,z) = plads nr x + 100*(y-1) + 100^2*(z-1) i X
> Det er ligegyldigt hvordan den er defineret, bare det er en bijektiv
> afbildning mellem matricen og vektoren X.

Det ønsker jeg ikke da 3d rummet i princippet kan være langt større, og jeg
ikke vil beregne værdierne før de skal anvendes. Jeg skal kun bruge et 2d
snit i dette rum, så det vil være voldsomt ineffektivt. Borset fra det, så
er det lidt samme ide. Du konverterer bare fra 1d til 3d ved udlæsning fra
lager, hvor jeg vil køre 3d fra starten ved at give et "3d seed". Er rummet
istedet 10.000^3, så fylder det også ret pænt

> Den funktion der laver X skal ud fra et seed s være:
> X_1 = g(s)
> X_i = g(X_{i-1}) , i > 1
> Her er g så den egentlig tilfældighedsgenerator, og forskellen i det du
> bruger er, at X_i ikke er en funktion af i (ikke direkte i hvert fald).
> Det er der jeg tror dit problem er.

Eh..? Talte du ikke lige om at forberegne værdierne til en 1d vektor? Jeg
tror ikke helt jeg er med på hvad du mener i ovenstående.

> [1] Måske vil du ikke i din algoritme have hele matricen på én gang, men
> generere de tilfældige tal efterhånden som de skal bruges.
> [2] Måske igen ikke på én gang.

Nej, netop ikke
Tak for dit feedback.



Torben Brandt (13-01-2004)
Kommentar
Fra : Torben Brandt


Dato : 13-01-04 23:09

Georg Bagen Busk skrev:
>>Den funktion der laver X skal ud fra et seed s være:
>> X_1 = g(s)
>> X_i = g(X_{i-1}) , i > 1
>>Her er g så den egentlig tilfældighedsgenerator, og forskellen i det du
>>bruger er, at X_i ikke er en funktion af i (ikke direkte i hvert fald).
>>Det er der jeg tror dit problem er.
>
> Eh..? Talte du ikke lige om at forberegne værdierne til en 1d vektor? Jeg
> tror ikke helt jeg er med på hvad du mener i ovenstående.

Beklager den lange svartid, har ikke lige været ved computeren...

Jeg tror vi snakker forbi hinanden. Det jeg argumenterer for er, at du
skal have en funktion (eller et objekt, hvis du programmerer OOP), som
bare kaldes med "be' om næste tilfældige tal", du skal ikke sige "jeg
vil gerne have det tilfældige tal, der svarer til plads (1,2,3)".
For hvis du spørger på den måde, så kan du risikere at tallene ikke
bliver tilfældige, men at der bliver et mønster i billedet.

Hvis du vil have at pixel (1,2,3) /altid/ får samme tal (så kan det vel
bare ikke kaldes tilfældigt), så duer min metode ikke.
Men hvis du vil fordele nogle tilfældige tal ud over nogle punkter, så
behøver det tilfældige tal i punkt (x,y,z) vel ikke afhænge af punktets
koordinater... Det er der jeg siger at når du så skal bruge et tal, så
beder du bare om næste tilfældige tal fra funktionen.

Fordelen - implementeringsmæssigt - er at den tilfældighedsfunktion ikke
behøver afhænge af 3 seeds, men kun af 1 seed, som tilsyneladende er
nemmere.

mvh Torben


Georg Bagen Busk (14-01-2004)
Kommentar
Fra : Georg Bagen Busk


Dato : 14-01-04 06:30

> Beklager den lange svartid, har ikke lige været ved computeren...

Det skal du skam ikke. Du har sikkert andet at lave end at besvare mine
spørgsmål

> Hvis du vil have at pixel (1,2,3) /altid/ får samme tal (så kan det vel
> bare ikke kaldes tilfældigt), så duer min metode ikke.

Det vil jeg have efter et givent seed er taget med. Jeg vil have at et
givent punkt i 3d altid giver samme "tilfældige" værdi retur. Det skyldes at
jeg ikke beregner alle værdier i rummet på een gang, men efterhånden som det
skal bruges. Det er heller ikke ethvert punkt i rummet jeg beregner en
tilfældig værdi for. Mellem visse fikspunkter interpolerer jeg værdierne med
en cosinus funktion.

Lad os sige at det er 1d for overblikkets skyld. Jeg har et fikspunkt for
hvert tiende heltal. 0 og 10. Hvis jeg skal bruge værdien i 4.324, så
beregner jeg værdien i de to nabopunkter, som her er 0 og 10, hvorefter jeg
interpolerer mellem dem for at finde værdien i 4.324. Skal jeg derefter
finde værdien i 4.5, så skal jeg igen beregne de to naboer og interpolere.
Det er her vigtigt at de to naboer får samme værdi som sidst. Derfor vil jeg
anvede deres koordinater som seeds til en tilfældighedsgenerator, så de
giver samme værdi hver gang.
Det er ikke relevant at forberegne alle fikspunkterne, da der i princippet
er uendeligt mange, og forholdsvis få skal bruges.

> Fordelen - implementeringsmæssigt - er at den tilfældighedsfunktion ikke
> behøver afhænge af 3 seeds, men kun af 1 seed, som tilsyneladende er
> nemmere.

Ja.. et seed er tilsyneladende nemmere. Jeg fatter dog stadig ikke hvorfor.
Hvis vi taler om 2d og x kan være 0..999 , så burde man kunne beregne et
seed som x+y*1000, men det virker altså ikke... kan absolut ikke se hvorfor
ikke :-/




Michael Vittrup (14-01-2004)
Kommentar
Fra : Michael Vittrup


Dato : 14-01-04 08:58



Georg Bagen Busk (14-01-2004)
Kommentar
Fra : Georg Bagen Busk


Dato : 14-01-04 15:13

> Hvor tilfældigt behøver det at være? Kan du ikke bare sætte den interne
> randomgenerator til seed (x*y*z) eller (x+y+z) eller noget i den stil, og
> så bare kalde den almindelige random()-rutine?

Lidt mere tilfældigt end det
Ved at sige x*y*z vil (1,2,3) og (2,1,3) have samme værdi. Det vil i den
grad give et mønster.


> Eller eventuelt noget a'la
>
> srand(x); tal = rand();
> srand(y); tal += rand();
> srand(z); tal += rand();

Giver også mønstre. Har forsøgt. Var det dog så bare pæne mønstre



Torben Ægidius Mogen~ (14-01-2004)
Kommentar
Fra : Torben Ægidius Mogen~


Dato : 14-01-04 15:38

"Georg Bagen Busk" <no.mail@no.no> writes:

> > Hvis du vil have at pixel (1,2,3) /altid/ får samme tal (så kan det vel
> > bare ikke kaldes tilfældigt), så duer min metode ikke.
>
> Det vil jeg have efter et givent seed er taget med. Jeg vil have at et
> givent punkt i 3d altid giver samme "tilfældige" værdi retur. Det skyldes at
> jeg ikke beregner alle værdier i rummet på een gang, men efterhånden som det
> skal bruges. Det er heller ikke ethvert punkt i rummet jeg beregner en
> tilfældig værdi for. Mellem visse fikspunkter interpolerer jeg værdierne med
> en cosinus funktion.
>
> Lad os sige at det er 1d for overblikkets skyld. Jeg har et fikspunkt for
> hvert tiende heltal. 0 og 10. Hvis jeg skal bruge værdien i 4.324, så
> beregner jeg værdien i de to nabopunkter, som her er 0 og 10, hvorefter jeg
> interpolerer mellem dem for at finde værdien i 4.324. Skal jeg derefter
> finde værdien i 4.5, så skal jeg igen beregne de to naboer og interpolere.
> Det er her vigtigt at de to naboer får samme værdi som sidst. Derfor vil jeg
> anvede deres koordinater som seeds til en tilfældighedsgenerator, så de
> giver samme værdi hver gang.
> Det er ikke relevant at forberegne alle fikspunkterne, da der i princippet
> er uendeligt mange, og forholdsvis få skal bruges.

Det du har brug for er det man almindeligvis kalder en hashfunktion:
Noget som tager en værdi (f.eks. et talsæt eller en tekst) og
producere et tal, sådan at selv næsten ens værdier giver helt
forskellige tal mens helt ens værdier giver end tal. Det vil sige at
der er tale om en "ægte" funktion.

Hvis du har en hashfunktion H fra tal til tal, kan du lave en 3-inputs
hashfunktion H3 f.eks. ved at definere H3(x,y,z) = H(x+H(y+H(z))).
Som H kan du godt bruge en pseudotilfældighedsgenerator, men kør den
et par iterationer, dvs. H(x) = rnd(rnd(rnd(x))). Hvis du gerne vil
kunne have forskellige H funktioner (initialiseret med en seed), kan
du evt. lade H være H(x) = rnd(seed1+rnd(seed2+rnd(seed3+x))), hvor
seed1, seed2 og seed3 kan variere.

   Torben

Jens Axel Søgaard (10-01-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 10-01-04 23:36

Georg Bagen Busk wrote:
> Jeg anvender i øjelibkket en generator af "tilfældige" tal som tager to
> seeds. De seeds jeg anvender er koordinaterfor et punkt i 2d. Metoden giver
> gode pseudo tilfældige tal, men jeg kan ikke formå at udvide den til at
> virke med tre seeds.

Vil du ikke beskrive, hvad du skal bruge de tilfældige tal til?

(Hvis det bare er en følge af tilfældige tal, du har brug for,
er der vel ingen grund til at benytte mere end et frø, den første
gang tilfældighedsfrembringeren kaldes.)

--
Jens Axel Søgaard

kjaer (11-01-2004)
Kommentar
Fra : kjaer


Dato : 11-01-04 14:55


"Jens Axel Søgaard" <usenet@jasoegaard.dk> skrev i en meddelelse
news:40007ebb$0$69930$edfadb0f@dread12.news.tele.dk...
> Georg Bagen Busk wrote:
> > Jeg anvender i øjelibkket en generator af "tilfældige" tal som tager to
> > seeds. De seeds jeg anvender er koordinaterfor et punkt i 2d. Metoden
giver
> > gode pseudo tilfældige tal, men jeg kan ikke formå at udvide den til at
> > virke med tre seeds.
>
> Vil du ikke beskrive, hvad du skal bruge de tilfældige tal til?
>
Lige et amatør-spørgsmål; kan en computer finde et tilfældigt tal?



Jeppe Seidelin Dam (11-01-2004)
Kommentar
Fra : Jeppe Seidelin Dam


Dato : 11-01-04 16:13

kjaer skrev:
> Lige et amatør-spørgsmål; kan en computer finde et tilfældigt tal?

Hvad er et tilfældigt tal? Computeren kan generere nogle pseudotilfældige
tal, som til alle praktiske formål er lige så gode som "ægte" tilfældige
tal.

mvh
Jeppe Seidelin Dam



Jens Axel Søgaard (11-01-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 11-01-04 16:31

kjaer wrote:

> Lige et amatør-spørgsmål; kan en computer finde et tilfældigt tal?

Se nederste halvdel af:

<http://makeashorterlink.com/?R23E12707>

--
Jens Axel Søgaard

Georg Bagen Busk (11-01-2004)
Kommentar
Fra : Georg Bagen Busk


Dato : 11-01-04 17:27

> Lige et amatør-spørgsmål; kan en computer finde et tilfældigt tal?

Kan nogen? Udfaldet af et terningkast er heller ikke tilfældigt, men
afhænger af hvordan terningerne kastes, lander og ruller rundt.

Der er dog fremstillet hardware, som giver mere tilfældige tal end software
direkte kan. Som jeg husker det kan det laves ved at forbidne en PNP
transistors emitter til base for at give feedback. Om der kommer strøm ud
eller ej kan ses som binære værdier. Der findes sikkert mange andre metoder.



Michael Zedeler (12-01-2004)
Kommentar
Fra : Michael Zedeler


Dato : 12-01-04 05:57

Georg Bagen Busk wrote:

>>Lige et amatør-spørgsmål; kan en computer finde et tilfældigt tal?
>
> Kan nogen? Udfaldet af et terningkast er heller ikke tilfældigt, men
> afhænger af hvordan terningerne kastes, lander og ruller rundt.

Men en vigtig ting der adskiller de to er at det er umuligt at forudse
hvad udfaldet af et terningkast bliver på baggrund af alle de tidligere
kast med samme terning. Det samme gør sig ikke gældende med PRNG (givet
at man ikke seeder dem undervejs), omend perioden kan være så lang at
det ikke kan lade sig gøre i praksis.

> Der er dog fremstillet hardware, som giver mere tilfældige tal end software
> direkte kan. Som jeg husker det kan det laves ved at forbidne en PNP
> transistors emitter til base for at give feedback. Om der kommer strøm ud
> eller ej kan ses som binære værdier. Der findes sikkert mange andre metoder.

Jeg hørte at SGI havde lavet noget med en lavalampe og en laser.

På et tidspunkt overvejede jeg faktisk om man kunne sælge tilfældige tal
på CD'er (hver CD skulle så være unik og sælges i forseglet indpakning -
et stykke "software" som man iøvrigt ikke er specielt interesseret i at
tage ulovlige kopier af). Der er steder i forbindelse med div.
protokoller hvor man har behov for tilfældige tal i så stort omfang at
det kan være svært at fremskaffe.

Mvh. Michael.

Peter Makholm (12-01-2004)
Kommentar
Fra : Peter Makholm


Dato : 12-01-04 09:17

Michael Zedeler <michael@zedeler.dk> writes:

> Jeg hørte at SGI havde lavet noget med en lavalampe og en laser.

Andre kilder til sand tilfældighed er radioaktiv henfald og atmosfærisk
støj fra en radio. Man kan på nettet hente tilfældighed genererert ud
fra disse tre metoder:

SGI's lavalamper: http://www.lavarnd.org/
Radioaktivt henfald: http://www.fourmilab.ch/hotbits/
Atmosfærisk støj: http://random.org/

Man kan også få PCI-kort der har en hardwareenhed der laver tilfældige
tal med lignende kilder.

> et stykke "software" som man iøvrigt ikke er specielt interesseret i
> at tage ulovlige kopier af). Der er steder i forbindelse med
> div. protokoller hvor man har behov for tilfældige tal i så stort
> omfang at det kan være svært at fremskaffe.

Umidelbart ville jeg tro at dem der have rigtig brug for den slags
også gerne ville har meget mre styr på hvor deres tilfældige tal kom
fra end at købe dem fra et tilfældigt firma.

--
Peter Makholm | Perhaps that late-night surfing is not such a
peter@makholm.net | waste of time after all: it is just the web
http://hacking.dk | dreaming
| -- Tim Berners-Lee

Georg Bagen Busk (12-01-2004)
Kommentar
Fra : Georg Bagen Busk


Dato : 12-01-04 13:30

> Umidelbart ville jeg tro at dem der have rigtig brug for den slags
> også gerne ville har meget mre styr på hvor deres tilfældige tal kom
> fra end at købe dem fra et tilfældigt firma.

Et tilfældigt firma er vel netop den bedste kilde til tilfældige data?



Jeppe Stig Nielsen (12-01-2004)
Kommentar
Fra : Jeppe Stig Nielsen


Dato : 12-01-04 18:15

Peter Makholm wrote:
>
> Andre kilder til sand tilfældighed er radioaktiv henfald og atmosfærisk
> støj fra en radio. Man kan på nettet hente tilfældighed genererert ud
> fra disse tre metoder:
>
> SGI's lavalamper: http://www.lavarnd.org/
> Radioaktivt henfald: http://www.fourmilab.ch/hotbits/
> Atmosfærisk støj: http://random.org/
>
> Man kan også få PCI-kort der har en hardwareenhed der laver tilfældige
> tal med lignende kilder.

Det er selvfølgelig et filosofisk spørgsmål om disse ting er »virkelig«
tilfældige. Man hvad betyder tilfældighed? Hvis man fx mener at verden
er strengt deterministisk, og at fremtiden er fastlagt i enhver detalje,
så er der jo ikke rigtig noget (heller ikke det ovenstående) der er
»tilfældigt«.

--
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)

Michael Zedeler (12-01-2004)
Kommentar
Fra : Michael Zedeler


Dato : 12-01-04 20:26

Peter Makholm wrote:

> Umidelbart ville jeg tro at dem der have rigtig brug for den slags
> også gerne ville har meget mre styr på hvor deres tilfældige tal kom
> fra end at købe dem fra et tilfældigt firma.

Det har du sikkert ret i. Idéen er i det hele taget fjollet. Jeg har
ikke efterfølgende hørt om nogen der skulle være begyndt at sælge
tilfældige tal. Desuden findes der - som du selv nævner - en masse
udemærkede hw-baserede løsninger.

Idéen kom sig af et projekt hvor min virkomhed skrev et stykke software
som netop skulle bruge op til 4096 tilfældige bits hver gang det skulle
generere et nøglepar (skete sjældent) og ca. 128 bits hver gang det
skulle sende en besked (skete ofte). Det viste sig faktisk at være svært
(men ikke umuligt) at lave en softwarebaseret løsning som genererede
tilfældige bits af tilstrækkelig god kvalitet.

Mvh. Michael.


Jens Axel Søgaard (12-01-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 12-01-04 20:40

Michael Zedeler wrote:

> Det har du sikkert ret i. Idéen er i det hele taget fjollet.

Det skal du ikke sige:

<http://www.buck.com/digits.html>
<http://www.maa.org/mathland/mathland_4_22.html>

Vil man teste sine nyindkøbte data kan man jo altid køre
en test på dem.

--
Jens Axel Søgaard

Henning Makholm (12-01-2004)
Kommentar
Fra : Henning Makholm


Dato : 12-01-04 22:31

Scripsit Jens Axel Søgaard <usenet@jasoegaard.dk>
> Michael Zedeler wrote:

> > Det har du sikkert ret i. Idéen er i det hele taget fjollet.

> Vil man teste sine nyindkøbte data kan man jo altid køre
> en test på dem.

Bare man ikke vil bruge dem til kryptografiske formål. Dér er det
væsentlige ved tilfældige tal jo at man selv er den eneste der ved
*hvilket* tal man har valgt. Det kan en cd-rom ikke hjælpe med.

--
Henning Makholm "Det er du nok fandens ene om at
mene. For det ligger i Australien!"

Jens Axel Søgaard (12-01-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 12-01-04 22:45

Henning Makholm wrote:
> Scripsit Jens Axel Søgaard <usenet@jasoegaard.dk>
>
>>Michael Zedeler wrote:

>>>Det har du sikkert ret i. Idéen er i det hele taget fjollet.

>>Vil man teste sine nyindkøbte data kan man jo altid køre
>>en test på dem.

> Bare man ikke vil bruge dem til kryptografiske formål. Dér er det
> væsentlige ved tilfældige tal jo at man selv er den eneste der ved
> *hvilket* tal man har valgt. Det kan en cd-rom ikke hjælpe med.

Det har du ret i.

--
Jens Axel Søgaard

Hans Jakobsen (13-01-2004)
Kommentar
Fra : Hans Jakobsen


Dato : 13-01-04 00:08

> Vil man teste sine nyindkøbte data kan man jo altid køre
> en test på dem.

Hvilken test kan du foreslå? Jeg har somme tider for sjov testet forskellige
compileres rand() og jeg kan ikke se nogle mangler. Testene har været
generering af n tal mellem a og b og derefter analyse af hppigheden af hvert
tal. De så meget jævnt ud. Prøvet at plotte en pixel på skærmen i en
x-y-position fra rand() og hvis en pxiel plottes oven i en tidligere øge
lysstyrken med en... gav bare en ret jævn grå flade til sidst.
Det er måske også meget primitive test, men hvad kan man ellers prøve med?



Jens Axel Søgaard (13-01-2004)
Kommentar
Fra : Jens Axel Søgaard


Dato : 13-01-04 00:30

Hans Jakobsen wrote:
>>Vil man teste sine nyindkøbte data kan man jo altid køre
>>en test på dem.
>
>
> Hvilken test kan du foreslå?

DIEHARD af tidligerenævnte Marsaglia:

<http://www.csis.hku.hk/~diehard/cdrom/>

eller

<http://stat.fsu.edu/~geo/diehard.html>

(Jeg er ikke helt sikker på, at de ovennævnte
sider er de officielle)

--
Jens Axel Søgaard



Henning Makholm (13-01-2004)
Kommentar
Fra : Henning Makholm


Dato : 13-01-04 00:43

Scripsit "Hans Jakobsen" <hjk@mail.tele.dk>

> Jeg har somme tider for sjov testet forskellige compileres rand() og
> jeg kan ikke se nogle mangler. Testene har været generering af n tal
> mellem a og b og derefter analyse af hppigheden af hvert tal.

Statistikere (og især kryptologer) har langt stærkere krav til
tilfædighed end det.

Som et rent minimum skal sekvensen stadig være lige så tilfældig hvis
man kun ser på hvert andet, tredje ... etc tal i den. Og der må heller
ikke være nogen tydelige afhængigheder mellem efterfølgende tal. Hvis
49892 fx altid efterfølges af enten 20019 eller 33, er den gal.

Til kryptografiske anvendelser går man særligt op i, at en række af
tal fra den genererede sekvens ikke må kunne bruges til at forbedre et
gæt på hvad nabotallene i sekvensen er.

> Det er måske også meget primitive test, men hvad kan man ellers
> prøve med?

En god måde at snuse til emnet på egen hånd er at forsøge at
konstruere en talgenerator som består de tests man har indtil nu, men
som alligevel kan forudsiges udfra uddata. Så udtænker man en test der
kan afsløre generatoren, og derefter begynder man forfra.

(Men forvent ikke at man på den måde kan nå i nærheden af de tests de
professionelle bruger).

--
Henning Makholm "This imposes the restriction on any
procedure statement that the kind and type
of each actual parameter be compatible with the
kind and type of the corresponding formal parameter."

Peter Makholm (13-01-2004)
Kommentar
Fra : Peter Makholm


Dato : 13-01-04 07:40

"Hans Jakobsen" <hjk@mail.tele.dk> writes:

> > Vil man teste sine nyindkøbte data kan man jo altid køre
> > en test på dem.
>
> Hvilken test kan du foreslå? Jeg har somme tider for sjov testet forskellige

http://www.fourmilab.ch/random/

--
Peter Makholm | Vi smider blade allesammen - hele tiden
peter@makholm.net | som et konstant spirende efterår
http://hacking.dk | Og hele tiden vokser nye frugter frem
| og vi finder nogen til at plukke dem
| -- Tilt, Perkussive popler

Michael Zedeler (13-01-2004)
Kommentar
Fra : Michael Zedeler


Dato : 13-01-04 02:16

Jens Axel Søgaard wrote:

> Michael Zedeler wrote:
>
>> Det har du sikkert ret i. Idéen er i det hele taget fjollet.
>
> Det skal du ikke sige:
>
> <http://www.buck.com/digits.html>
> <http://www.maa.org/mathland/mathland_4_22.html>

Jeg er meget glad for at jeg ikke har fået en plads ved siden af disse
virksomheder på listen over leverandører af tilfældige data.

Hvis endelig at det drejer sig om applikationer som skal bruge
tilfældige data til nøglegenerering vil man enten kunne dække behovet
med en kombination af noget software og brugerinput. Er der behov for
rigtig mange bits, må man købe noget hardware som fremstiller det. At
købe en CD-ROM med tilfældige tal er en underlig kluntet mellemvej, som
åbner op for flere problemer, end det løser. F. eks. hvad der skal ske
hvis man løber tør for tilfældige tal og så lige problemet med kopiering
af data fra CD'en.

Mvh. Michael.

Henning Makholm (12-01-2004)
Kommentar
Fra : Henning Makholm


Dato : 12-01-04 22:23

Scripsit Michael Zedeler <michael@zedeler.dk>

> Idéen er i det hele taget fjollet. Jeg har ikke efterfølgende hørt
> om nogen der skulle være begyndt at sælge tilfældige tal.

Debian har overvejet at distribuere pakker fyldt med pseudotilfældige tal:
<http://lists.debian.org/debian-devel/2003/debian-devel-200311/msg00907.html>

> Idéen kom sig af et projekt hvor min virkomhed skrev et stykke
> software som netop skulle bruge op til 4096 tilfældige bits hver gang
> det skulle generere et nøglepar (skete sjældent) og ca. 128 bits hver
> gang det skulle sende en besked (skete ofte). Det viste sig faktisk at
> være svært (men ikke umuligt) at lave en softwarebaseret løsning som
> genererede tilfældige bits af tilstrækkelig god kvalitet.

Hvis man ellers stoler på Linuxs /dev/random, så producerer den flere
hundrede tilfældige bits hver gang jeg så meget som berører en tast.

--
Henning Makholm "NB! Benbrud er et symptom, ikke en sygdom. Hvis du
har brækket benet bør du gå til lægen for at få fastslået
årsagen. Brug aldrig Herbalit<tm> mod benbrud uden lægens anvisning."

Michael Zedeler (13-01-2004)
Kommentar
Fra : Michael Zedeler


Dato : 13-01-04 02:10

Henning Makholm wrote:

> Scripsit Michael Zedeler <michael@zedeler.dk>
>
>>Idéen er i det hele taget fjollet. Jeg har ikke efterfølgende hørt
>>om nogen der skulle være begyndt at sælge tilfældige tal.
>
> Debian har overvejet at distribuere pakker fyldt med pseudotilfældige tal:
> <http://lists.debian.org/debian-devel/2003/debian-devel-200311/msg00907.html>

Suk!

> Hvis man ellers stoler på Linuxs /dev/random, så producerer den flere
> hundrede tilfældige bits hver gang jeg så meget som berører en tast.

Jeps. Systemet skulle køre på Windows. Pænt farvel, /dev/random.

Vi endte med at bede brugeren om at køre rundt med musen for at generere
nogle tilfældige data. Derudover skrev vi en slags indlejret
entropiopsamlingsfacilitet som lavede statistik på systemets ressourcer
og gemte dem i en temporær buffer.

Mvh. Michael.

Michael Zedeler (12-01-2004)
Kommentar
Fra : Michael Zedeler


Dato : 12-01-04 02:28

kjaer wrote:
>
> Lige et amatør-spørgsmål; kan en computer finde et tilfældigt tal?

Det som diskuteres er ikke "rigtige" tilfældige tal, som er ligeså
tilfældige som hvis du f. eks. slår med en terning. Der er et system i
de tal som genereres, men systemet er så indviklet at det som regel er
umuligt at forudse hvad det næste tal bliver. De algoritmer som
frembringer denne slags tal kaldes PRNG - pseudo random generators.

Mvh. Michael.

Thomas Krog (11-01-2004)
Kommentar
Fra : Thomas Krog


Dato : 11-01-04 22:17

> For samme xy giver den samme værdi, hvilket er som ønsket. Hvordan
udbygger
> man den så den tager xyz istedet?

Du kunne genbruge rand2 sådan:
double rand3(int x, int y, int z){
return rand2(k*rand2(x,y), z); // hvor k er en konstant
}
Jeg skal ikke kunne sige hvorvidt det giver et synligt mønster - men det er
måske et forsøg værd. Du kunne eventuelt køre med to forskellige udgaver af
rand2 som bruger forskellige konstanter.



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

Månedens bedste
Årets bedste
Sidste års bedste