Wzór funkcji pseudolosowej

Jun 03, 2009 9 Replies

Potrzebuję "wylosować" liczbę w zakresie 1-100 (lub 0-99). Ma ktoś jakieś rozwiązanie matematyczne, które zapewni mocny rozrzut wartości?



PC



Użytkownik PC napisał:

Taki prosty generator pseudolosowy, to rejestr przesuwający ze sprzężeniem zwrotnym XOR. Klepałem coś takiego na AVR-y w C. Poszukam dzisiaj i podeślę.

Pozdrawiam Grzegorz

1:
formatting link
formatting link
(ten o którym pisał grzegorz) 3:
formatting link
pozdr @

Użytkownik Artur Miller napisał:

Oooo ciekawie zrobione :-)

P.S. Jednak algorytm rzeźbiłem w assemblerze AVR. Jak ktoś zainteresowany to zapraszam.

Pozdrawiam Grzegorz

PC pisze:

Wykorzystaj biblioteczną funkcję rand(), ograniczając wynik do interesującego Cię zakresu, np. tak:

x = rand() % 100;

A naprawdę mocny rozrzut wartości (i co ważniejsze, brak korelacji z poprzednimi wynikami) daje dopiero fizyczny generator szumu losowego:

formatting link

Użytkownik "Adam Dybkowski" snipped-for-privacy@45wp.pl napisał w wiadomości news:h06vul$o7l$ snipped-for-privacy@news.wp.pl...

Nie wiem czy pomysl jest dobry ale moja propozycja jest taka aby przed wykonaniem rand ustawic zarodek (chyba funkcja srand(arg)) a jako zarodek dac wartosc odczytana z przetwornika AD linii ktora "wisi w powietrzu". moze troche to poprawi rozklad prawdopodobienstwa?

Uwaga - statystycznie niezbyt poprawne. Jesli rand() ma zakres np do 65535, to wyniki 0-35 maja wieksze prawdopodobienstwo niz 36-99

J.

Ja nie piszę w C a potrzebuję tylko formułę matematyczną, zeby napisać coś samodzielnie.

PC

no to najprosciej bedzie Ci oprogramowac automat a ktorym pisal Grzegorz na xor. Pod asemblerem bedzie to prosto wykonac. Rozklad losowy jest dosc przyzwoity i prawdopodobnie w Twoich zastosowaniach wystarczajacy. Gdybys potrzebowal cos wymyslnego prawdopodobnie nie nie pytał bys na grupie.

Pzdr Darek

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required