| Adam 11.08.2019 10:56 Bydliště: Praha
|
| Jarin's napsal(a): ... randomSeed(analogRead(0));
přehodíš do smyčky Loop() ... ... ...
100% RANDOM
void loop() {
randomSeed(micros()); ... |
Kdepak... Nevím, jestli sis to zkoušel někdy v praxi, ale přemístění funkce randomSeed() do procedury loop(),
nebo i to použití randomSeed(micros()), situaci jen zhoršuje.
Opakovaně volaný randomSeed(micros())
v určitém ohledu nahodilost zcela zabíjí - funkce generuje pořád zcela stejnou posloupnost čísel (stále stejnou při každém resetu Arduina).
Současně neposkytuje dobrou rovnováhu náhodných čísel, protože třeba i po 1 milionu tahů náhodného čísla z rozsahu 0-10 byla průměrná hodnota všech 5,100.
Opakovaně volaný randomSeed(analogRead())
způsobuje ještě větší malér - už po několika tazích přestane vybírat z celého rozsahu 0-10
a začne tahat jen 3-4 čísla z něj a později jen 1-2.
Jak jsem psal v tom příspěvku s grafem, tak to klasické použití, kdy randomSeed() je voláno jen jednou na začátku programu a kdy jeho argumentem je analogRead(), dává velice slušné a vyvážené výsledky, že jsem byl až překvapen.
Když se to budeme snažit ještě nějak vylepšit, akorát se můžeme dopustit nějaké matematické rezonance
nebo interference, obrazně řečeno a z toho dobrého vyladění to akorát vyhodíme.
Nakonec, vždycky to budou jen pseudonáhodná čísla... |
|