Generator liczb (pseudo?)losowych na podkladzie AVRa

Nov 03, 2003 9 Replies

Witam!!



Czy znacie metody realizacji generatorów liczb losowych lub pseudolosowych na procesorze AVR - chodzi o to, ¿eby uzyskaæ efekt ca³kowitej przypadkowo¶ci. Czy da siê to zrobiæ programowo, bez stosowania zewnêtrznych elementów?? Je¶li nie, to jak to zrobiæ w sposób minimalizuj±cy liczbê zewnêtrznych elementów?? A co powiecie na pomys³, aby podczas programowania do pamiêci proscesora wgraæ kilkadziesi±t liczb uzyskanych wcze¶niej drog± losow±, niech procesor bierze je po kolei... . Czy jest to dobre wyj¶cie??



Pozdrawiam Konop



nie da się. Procesor ma skońćzoną liczbę stanów, więc losowości być nie może.

Dobre jeśli:

- liczby są rzeczywiście losowe (rzut monetą?)

- użyjesz je raz

Calkowitej przypadkowosci nie potrafi uzyskac nikt na swiecie, wiec sie nie przejmuj, ze Ty tez nie. ;-) Dosc latwo za to zrobic generatory pseudolosowe. Przejdz sie do biblioteki i poszukaj tam takiej ksiazeczki: Wieczorkowski, Zielinski, "Komputerowe generatory liczb losowych", tam jest wiecej informacji, niz Ci potrzeba. Troche tez jest tu:

formatting link
i tu:

formatting link
Nie kombinuj niczego na wlasna reke, bo do zrobienia dobrego generatora liczb pseudolosowych naprawde potrzeba sporej wiedzy.

Tak.

To jest _bardzo_ zle wyjscie.

Pozdrawiam Piotr Wyderski

Witam, Nie da się zrobić całkowitej przypadkowości z definicji. Liczbę generuje algorytm a więc nie może być przypadkowa.

Najpopularniejsza i najefektywniejsza metoda to wzmacnianie szumów elementów półprzewodnikowych i ich pomiar przetwornikiem AC. Też nie do końca przypadkowa. Szuim wcale nie jest biały a przetwornik ma skończoną precyzję przez co umieszcza liczby w określonym przedziale.

Zważywszy, że źródło liczb będzie stałe gdzie tu przypadkowość? Prędzej czy później liczby się powtórzą.. Branie liczb po kolei też nie jest dobrym wyjściem lepiej losować.

Zagadnienie nie jest rozwiązywalne musisz pójść na kompromis i zgodzić się na ciąg pseudolosowy. Im większa szerokość binarna liczby tym lepiej..

JanuszR

PS Stosowałem zwykły ciągle przewijany licznik binarny sterowany zegarem RC o jak najgorszej stabilności

dodam jeszcze: na podstawie stanu w danej chwili _dokładnie_ wiadomo jaki będzie stan w chwili następnej

Witam,

Jeśli liczbe którą potrzebujesz wylosować potrzebujesz co jakiś nieokrągły czas - np po naciśnięciu przycisku, czy nie wiem... to najprościej puścić w szybkiej pętli inkrementacje, żeby sobie latało

0-255 w kółko, i zawsze coś innego wypadnie w momencie naciśnięcia tego guzika...

jeleń

U¿ytkownik "jelen" <jelo@no_spam.sheep.one.pl> napisa³ w wiadomo¶ci news:pan.2003.11.03.14.52.08.342861@no_spam.sheep.one.pl...

ewenualnie kondensator- roz³adowuje siê , i w pewnym momencie przerzuca uk³ad z 1 na 0 - wtedy uk³ad staje - jesli pêtla by³a dostatecznie szybka, to na wynik wp³ynie dos³ownie wszystko :-) - nawet chwilowa zmiana temperatury, która spowoduje ze kondensator ros³aduje siê o t± 1ms szybciej lub wolniej - zrobi³em co¶ takiego w uk³adzniedo losowania, i wyniki wygl±daj± na rzeczywicie przypadkowe :-) - zadnej sekwencyjnosci

Uk³ad z przyciskiem odpada... z kondensatorem - mo¿e by siê da³o zastosowaæ :)... . Chodzi o to, ¿e potrzebujê co pewien czas wylosowaæ, jak d³ugi bêdzie kolejny odcinek czasu, po którym znów wylosujê kolejny... . Ale wszystko jest realizowane przez procka... . Wiêc problem polega na tym, ¿e procek ma mierzyæ czas, a jednocze¶nie (w tle) losowaæ liczby... a z drugiej strony - losowania bêd± siê odbywa³y w nieregularnych odstêpach czasu.

Pozdrawiam Konop

W artykule news:bo6crm$net$ snipped-for-privacy@inews.gazeta.pl, niejaki(a): Konop z adresu snipped-for-privacy@gazeta.pl napisa³(a):

W tym zastosowaniu mo¿e sprawdzi siê taki prosty generator 16 bitowych liczb pseudolosowych: Random(n):= [(random(n-1)+1)*75] mod 65536

Jezeli nie potrzebujesz losowac zbyt czesto to okresy dobrych pseudolosowych generatorow sa na tyle dlugie, ze nie beda ci w niczym przeszkadzac. Przyjrzyj sie standardowej funkcji random() w avrgcc (nie rand tylko random), jej naglowek jest w stdlib.h. Cytuje kawalek zrodla biblioteki libc:

  • From "Random number generators: good ones are hard to find", * Park and Miller, Communications of the ACM, vol. 31, no. 10, * October 1988, p. 1195.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required