Hlavní přehled   |   Info a nápověda Přihlásit   |   Registrovat
 
 
Příspěvek umístěný v tematickém vlákně:    Arduino, mikrokontroléry, mikropočítače   (str. 5)
 
Adam   
13.08.2019 20:53
Bydliště: Praha
6414 583 6129 
  Jarin's napsal(a):    ... píšou tam přesně to, co jsem ti popsal, že pokud neinicializuješ randomizer opakovaně, dostaneš po nějaké době opakující se sekvenci. ...

A tohle já snad nějak odmítám? Jako kdybys vůbec nečetl, o čem píšu. A protože tím, že to asi nějak čteš po svém, tu můžeš akorát kde koho zmást, tak tedy pokračuji a zkusím to jinak:

U nahodilosti je jedno z nejdůležitějších hledisek to, aby čísla z daného rozsahu dával randomizer
vyváženě - aby byla nahodilost v rovnováze. Tím je nahodilost tzv. kvalitní. Mělo by se to co nejvíc chovat třeba jako realita u hodů klasickou hrací kostkou, která nám dává náhodné hodnoty v rozsahu 1-6.
Kdybys udělal 6000 hodů a zapisoval sis je, mělo by nakonec vyjít, že zápisky se budou velmi blížit takovýmto četnostem:

Hodnota 1 nastala 1000x
Hodnota 2 nastala 1000x
Hodnota 3 nastala 1000x
Hodnota 4 nastala 1000x
Hodnota 5 nastala 1000x
Hodnota 6 nastala 1000x

Nebude to absolutně přesné, ale bude se to tomu v reálu opravdu hodně blížit.

Proto by velké množství tahů náhodných čísel z rozsahu 0-10 mělo dát výslednou průměrnou hodnotu 5,000. A to se skutečně povede, z čehož jsem měl radost, pokud se použije jen jednou
třeba ten randomSeed(analogRead()).

Dobře, víme, že časem, jak program běží, se hodnoty mohou opakovat, což Tobě jde asi nějak hodně proti srsti, ale celkově to z podstaty nahodilosti vidím jako podstatně menší zlo, než když nahodilost není vyvážená a místo 5,000 by průměr vycházel třeba na 5,100. Poukazuje to na to, že některá čísla to prostě háže jinak často než čísla jiná. To se dělo třeba v případě opakovaně volaného randomSeed(micros()), což jsi propagoval doslova jako "100% random". Ono už jenom tím, že micros() v jednoduché proceduře generování náhodného čísla musí skákat po nějakém konstantním číslu, by mělo varovat, že to asi nebude moc šťastné řešení.

No a tu naprosto stejnou posloupnost náhodných čísel po každém resetu už ani nebudu vzpomínat,
co je to za průšvih. A pokud radíš, aby se každá pátá nebo desátá nebo i-tá náhoda hodila extra přes randomSeed(analogRead()), tak to mi přijde pouze jako kamuflování toho ne úplně šťastného nápadu opakovaně volat randomSeed(micros()).

Je pro mě docela zvláštní, co (ne)očekáváš od co nejlepší nahodilosti, ale tak když Ti to takhle vyhovuje,
čiň si tak. Jen opravdu nedoporučuju z toho udělat návod pro ostatní.

Možná se mi v hlavě rodí nápad, jak podstatně tohle jednoduché generování náhodných čísel zkvalitnit
a výsledky mnohem více přiblížit "reálné nahodilosti".
Napřed to ale vyzkouším, protože i když bych se taky mohl ohánět já nevím kolika lety zkušeností
s programováním, napřed si to raději fakt vyzkouším, než budu něco tvrdit.
Zvláštní ocenění za úsilí nebo přínosPozitivní ohlasyOznačit příspěvek
  Přejít na příspěvek do vlákna      

 
 
Omforum.cz   |   Nápověda   |   Pravidla fóra   |   Podpořte chod fóra   |   Vytvořil: 2015-2026 Adam Benda
 
 
CC BY-NC-ND 3.0 CZ
Licence Creative Commons
Toto dílo podléhá licenci Creative Commons Uveďte původ-Neužívejte komerčně-Nezpracovávejte 3.0 Česká republika License