| Jarin's 13.08.2019 21:25 Bydliště: Zádveřice-Raková
|
| Adam napsal(a): ....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í. ..... |
Adame, je mi líto, že se pouštíš do debaty o věci, se kterou očividně nemáš mnoho zkušeností. Nakonec mě , profesionálovi v oboru, věřit nemusíš. Než ale napíšeš nejakou hloupost, tak si o tom problému něco nastuduj, Třeba pak uvěříš jiným profesionálům.
Tady je velmi dobrý materiál
https://www.codeproject.com/Articles/1083372/Random-Number-Generator-Recommendations-for-Applic
Podotýkám, že implementace C a C++ pro platformu AVR používá PRNG generátor.
Pro ty kdo se nehodlají probírat velmi složitým dokumentem, vytáhnu pár bodů.
.....Wildly Varying Seeds
For noncryptographic and seeded PRNGs, an application ought to generate seeds likely to vary wildly from previously generated seeds, to reduce the risk of correlated "random" numbers or sequences. In this sense, the following kinds of seeds are preferred, from most to least:
A bit sequence from a cryptographic RNG.
A seed extracted from hard-to-predict sources (see "Seed Generation" above).
A hash generated using several timestamps and additional data chosen by the application. Here, timestamps with finer than millisecond granularity (including CPU cycle counters) are preferred........
zde je tedy jasné, že použití funkce micros() i když ve zjednodušení pro daný příklad, tedy rozlišení na mikrosekundy není, jak píšeš " není moc šťastné řešení".
Statistical RNGs: Requirements......
.
.
If a statistical RNG implementation uses a PRNG, the following requirements apply......
.
.
Before an instance of the RNG generates a random number, it MUST have been initialized ("seeded") with a seed described as follows. The seed—
jednoznačně tedy musí být před každým použitím inicializován.....
Jak píšu. mi věřit nemusíš a je mi úplně jedno, jak si budeš své generátory náhody programovat. Na počátku celé diskuze jsem se ti snažil ukázat, jak to programuje většina ostatního světa, tedy programátorů. Samozřejmě si nemusíš těchto doporučení všímat, nakonec je to tvůj kód, a můžeš si to psát po svém.
Dobrý programátor se nepozná jen podle skvěle napsaného kódu, ale i podle toho, že dokáže přijmout informaci prověřenou miliardami řádků kódu od ostatních programátorů.
PS: pokud ti vadí že by začal stejně, pak co jsem psal o resetu je skutečnost i když se ti to nezdá. Tvé řešení může krátkodobě vypadat lépe nebo na jedno spuštění, ale pokud se bavíme o tom, že Arduino poběží několik dnů týdnů či měsíců bez výpadku napájení, je to úplně o něčem jiném, O celkové koncepčnosti byla moje, pravděpodobně pro tebe, úplně zbytečná rada.
Víc k tomu celému není co dodat. Já se budu i nadále ve svých projektech držet mnoha lety ověřených doporučení. Ty samozřejmě nemusíš a nemusíš ani dát na mě..... |
|