Olvastam egy könyvben, talán Szeminumerikus algoritmusok lehetett a címe, hogy veszélyes megközelítés, például az, amikor különböző algoritmusokat keverünk, esetleg a seed-et valamilyen jónak tűnő trükkel generáljuk újra, mert úgy tűnhet, ezzel aztán olyan jól megkevertük a dolgokat - pl. a számjegyeket is elkezdjük kevergetni -, hogy jó nagy ciklusunk lesz, aztán igazolta, de példával illusztrálta is, hogy a ciklus akár néhány 10, néhány százas hurokra redukálódhat. Amit írtál, az pedig láthatóan csökkenti a ciklus hosszát. Ráadásul az elmélet nélküli trükközésekkel azt is kockára teszed, hogy nem egyenletes eloszlást kapsz majd.
Egy mai számítógép párperc alatt körbe pörgetheti a RNG ciklust. Utánna meg csak ismétlődés...
Na ezt kellene növelni, és nem a felére csökkenteni. Új algoritmussal, vagy a meglévő algoritmushoz új konstansokkal. Kár, hogy nem az enyém a könyv, de a konstansok meghatározására is leírta a kritériumokat.
Ha V1, V2-t használjuk akkor egy 2^32 (2^31) ciklus után újra ugyanazok a véletlenszámok jönnek elő.
Mivel ettől többre lenne szükség, azért kell valami módon kiterjeszteni a ciklust.
A probléma C++ és Basic nyelvnél jött elő, és nem nálam.
Megoldásként szóba jöhet 1. egy teljesen új random függvény
2. a régit kell megbuherálni
A ciklus a példámban tényleg lecsökken felére, de az érték készlete nő és még tovább kell fejleszteni. pl. egy (1..4) véletlen szám szerint a vissza adott érték: 1: V1 2: V1 + V2 3: V2 4: V2 + V1
Az összeadás nem matematikai!
A felhasználás helyén természetesen a szokásos szorzás és venni az egészrészt.
Az időre, billentyüzetre, egérre, vonatkozó javaslatok kevés véletlenszámnál beválnak, de itt nem a véletlenszerüség, hanem a darabb számmal van a probléma.
Egy mai számítógép párperc alatt körbe pörgetheti a RNG ciklust. Utánna meg csak ismétlődés...
Még nem látom be, hogy ha a seed valamilyen n-re periodikus, ettől miért lenne nagyobb a ciklusa? Ha n páros, ettől az algoritmustól éppen fele lesz a periodicitás. Szerintem.