Potrzebuję "wylosować" liczbę w zakresie 1-100 (lub 0-99). Ma ktoś jakieś rozwiązanie matematyczne, które zapewni mocny rozrzut wartości?
PC
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:
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:
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
Dzięki wszystkim za pomoc.
PC
Have something to add? Share your thoughts — no account required.
Ask the community — no account required