- This topic has 6 replies, 4 voices, and was last updated 12 years, 12 months ago by .
Viewing 7 posts - 1 through 7 (of 7 total)
Viewing 7 posts - 1 through 7 (of 7 total)
- You must be logged in to reply to this topic.
Home › Forums › A Demokészítés művészete › Programozás › Matematikusoknak kérdés.
Olyan véletlen szám sorozat generáló kéne, aminek hosszú a periódusa, de ha akarok, tudok többet elöre lépni. Mondjuk N-et vagy akár fixen 65536ot ugorna.Több állapotváltozós megoldás kell, mert különben rövid a periódus.Jelen esetben úgy müködik a dolog, hogy meghívom N-szer a random szám generálót, ami túl lassú.Egy különleges animáció tömörítö algoritmushoz kéne amúgy.
Mondd mennyit lépjek előre random számsorban, és elküldöm e-mailben az eredményt! ;)
Nem értem pontosan, mi az, hogy “tudjon előre lépni?”. Az N+1. futás eredményéül kapott random számot köpje ki, az előtte levő N darabot meg tárolja el valahova?
Az a lényeg, hogy a demo többszöri futtatásakor ugyanazok a számsorozatok kerüljenek elö. A rossz sorozatok, amiket az offline calculáló kidob, azokat ki kell hagyni. Tehát kell egy nagyon hosszú sorozat, amiböl én kiválogatom a jó részeket, és csak azt mentem le pár 32bit intben, hogy mikor mennyit kell átugrani, (amivel nem müködött a fizikai efekt következö része)
LCG-k (linear kongruencia generator) latszolag ilyenek, de jo szar minosegu szamokat adnak, meg nagy periodushoz nagy modulus kell. Sokkal bonyolultabb generatorokban nem remenykednek hogy steppelheto…
Most azt találtam ki, hogy 64K hívásonként újraindítom egyel nagyobb seed-el, és párszor meghívom. Így ha a sorozat N-edik tagját keresem, akkor seed = n>>16; es meghívom n & 0xffff szer. Álltalában egész részsorozatok kellenek, néha van csak skip, tehát nem egyesével hívogatnám.
Ez jo otlet, es egyszeru. Ha nem eleg jo minosegu esetleg a generator, akkor egy hash-t meg ranyomhatsz a seedre.