-
21. Data: 2017-11-29 14:28:43
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Stregor <s...@w...to.gmail.com>
W dniu 2017-11-29 o 14:01, slawek pisze:
> On Wed, 29 Nov 2017 02:23:29 -0800 (PST), "M.M." <m...@g...com>
> wrote:
>> Ale czyje? Moje nastawienie? A jakie masz wyobrażenie o moim
>> nastawieniu, poprawnie zdekodowałeś moje nastawienie?
>
> Domagasz się pomocy, a nawet nie zdefiniowałeś dokładnie problemu.
> Chcesz pisać w Asemblerze, ale nie chcesz się przepracować. Chcesz
> pomocy, ale nie piszesz o jaki CPU chodzi (tyle że to nie x86).
>
> Chcesz pisać swój własny generator. Ale nie masz narzędzi do jego
> testowania. Chcesz szybko i byle jak, ale nie masz pojęcia jak i jak
> zacząć. No i fajnie.
>
> A książek nie będziesz czytać bo nie. Też zupełnie gites.
Rozmawiasz z M.M. A "chce" Adam Klobukowski.
--
Pozdrawiam,
Stregor
-
22. Data: 2017-11-29 18:48:54
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "Adam Klobukowski" <a...@g...com> napisał:
> Takie widzimisie.
Troche glupie (no chyba, ze w celach poznawczych).
Przynajmniej teoretycznie standardowy generator z C powinien byc
bardziej losowy i "sprzetowy" niz pisany samodzielnie chocby i w ASM^2
AK
-
23. Data: 2017-11-29 19:12:13
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "slawek" <f...@f...com> napisał w wiadomości
news:almarsoft.7787127689836467985@news.v.pl...
> On Wed, 29 Nov 2017 01:20:36 +0100, "AK" <n...@n...net> wrote:
>> PS: W "moich czasach" standard to byla ksiazka Zielinski
> ""Generatory liczb pseudolosowych"
>> czy jakos tak.
>
> Z rzeczy praktycznych Numerical Recipes mają rozdział o generatorach liczb
losowych.
Natomiast prastara ksiazka Zielinskiego o wiele lepiej tlumaczy teorię.
AK
-
24. Data: 2017-11-29 19:29:33
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "M.M." <m...@g...com> napisał:
> Użytkownik "M.M." <m...@g...com> napisał:
>
>> A po cholere jakies sztuczki?
> Bo chciałeś szybko a OGÓLNY algorytm modulo jest wolny. Algorytm dla
> konkretnej wartości (np. modulo 45) czasami jest dużo szybszy - w sumie
> myślałem, że to jest oczywiste dla Ciebie.
Czasami czasami... Sprawdzales czy to ma _jakiekolwiek_ znaczenie ?
>> Majac generator o rozkladzie jednostajnym (czyli <0, 1) ) przez
>> proste skalowanie otrzymuje
>> sie generator w potrzebnym przedziale.
>Obawiam się, że generator zaimplementowany na liczbach zmiennoprzecinkowych
> nie będzie szybki, a tu jeszcze jedno mnożenie na skalowanie...
Przeciez to jest pokaznie ogolnej zasady.
Nawet w standardowym C jest rand() dajacy integer.
O specjalizowanych bibliotekach/algorytmach nawet nie wspomne (MT, SFMT).
>> Generalnie na podstawie generatora jednostajnego droga
>> obliczania odwrotnej dystrubuanty
>> mozna otrzymac generator o innym rockladzie niz jednostajny.
> To wszystko prawda, ale do czego pijesz?
Do tego zeby _wpierw_ poznac choc "nieco" teorii a nie rzucac
sie niepotrzebnie na napisanie najszybszego na swiecie generatora
Moge sie zalozyc o wiele, ze ta wypasna "szybkosc" na cholere
bedzie interlokutoprowi potrzebna.
PS: Co do wolnego % nawt w fp to mozna bylo byc pewnym w "moich czasach"
(brak/slaby/osobny komprocesor). Dzis to chyba wyglada zupelnie inaczej :)
PS1: Od lat piszę na usenecie:
Po czym poznac nieopierzonego programistę C?
Po tym, ze zanim chocby jedna linijke napisze juz "optymalizuje"...
AK
-
25. Data: 2017-11-29 19:34:33
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
No brawo! :) Nic dodac nic ujac (zwlaszcza tekturka:))
AK
Użytkownik "slawek" <f...@f...com> napisał w wiadomości
news:almarsoft.8214239723429596713@news.v.pl...
> On Wed, 29 Nov 2017 00:48:54 -0800 (PST), "M.M." <m...@g...com> wrote:
>> liczb losowych, nie znajdziesz w tej książeczce specjalistycznego=
>> , z
>> podniesioną wydajnością np. kosztem jakości albo dzi?=
>> ?ki implementacji wykorzystującej specyficzne cechy nowych procesorów.
>
>
> Złe nastawienie.
> Czytałeś? Czy tylko tak ci się wydaje? Jak nie czytałeś to przeczytaj - głupszy od
tego nie
> będziesz.
>
> Przeczytaj rozdział o generatorach w Numerical Recipes, obejrzyj sobie jak jest
napisany generator
> w jakiejś bibliotece Open Source, np. GSL czy Scipy, ew. CERNLIB. Dogłębnie poznaj
czym jest
> "Mersenne Twister".
>
> Ale przede wszystkim określ czym dla ciebie są liczby losowe. Poszukaj pakietu "Die
hard" do
> testowania liczb losowych. Wymyśl swój generator. Puść przez testy. Spróbuj
uzasadnić
> matematycznie że twój generator to akurat to co ci potrzebne.
> Jeżeli twój hardware na to pozwala to dolutuj hardwareowy generator. Uwaga: odczyt
z wiszącego
> pinu NIE daje liczby losowej.
>
> Co do asemblera: zwykle program w C jest równie dobry jak asembler. Chyba że nie
jest. Ale aby tak
> było musisz znać asembler w stopniu przy którym nie ma znaczenia czy w asemblerze
napiszesz 20
> linijek czy 100.
>
> I najważniejsze: napisz sobie na tekturce odpowiedź na proste pytanie - DLACZEGO
STANDARDOWY
> GENERATOR LICZB LOSOWYCH JEST ABSOLUTNIE NIE DO PRZYJĘCIA?
-
26. Data: 2017-11-29 19:38:45
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "M.M." <m...@g...com> napisał:
> Ale co czytałem i co mi się wydaje?
Zielinskiego (bardziej teoria) i (tak jak Slawek b.dobrze radzil) Numerical Recipies
(od teorii do
czystej i uzytecznej praktyki).
Czytales ?
AK
-
27. Data: 2017-11-29 20:29:37
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Wed, 29 Nov 2017 18:48:54 +0100, "AK" <n...@n...net> wrote:
> Przynajmniej teoretycznie standardowy generator z C powinien byc
> bardziej losowy i "sprzetowy" niz pisany samodzielnie chocby i w
ASM^2
Ciekawe jest zrobienie /złego/ generatora. Tzn. takiego który daje
trudne, ale możliwe, do przewidzenia liczby. To tak jak z programem
szachowym: jak będzie za dobrze grał, to nie będzie po co z nim grać.
-
28. Data: 2017-11-29 20:34:28
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "Adam Klobukowski" <a...@g...com> napisał:
>> std::random_device device;
>> std::mt19937 egine{device()};
>> std::uniform_int_distribution<> dist(0, 44);
>>
>> std::cout << dist(engine) << '\n';
>>
>> Jest to C++11 i gwarantuje rozkład normalny otrzymywanych liczb...
> Dzięki, ale ja nie chcę C, C++, ani C++11.
Dostales (prawie)najlepsze (std::mt19937) z mozliwych istniejacych rozwiazan i
marudzisz eh...
AK
-
29. Data: 2017-11-29 20:38:18
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "slawek" <f...@f...com> napisał:
> Ciekawe jest zrobienie /złego/ generatora. Tzn. takiego który daje trudne, ale
możliwe, do
> przewidzenia liczby.
Dobrze wiesz ze zdecydowana wiekszosc "domorośle" robionych generatorow "losowych" ma
ta ceche :)
Najgorsze jest, ze bardzo czesto zdarzalo sie, ze te z bibliotek standardowych
kompilatorow tez...
:(
AK
-
30. Data: 2017-11-30 05:42:23
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: bartekltg <b...@g...com>
On Tuesday, November 28, 2017 at 9:48:28 AM UTC+1, Adam Klobukowski wrote:
> Poszukuję prostego (szybkiego) generatora pseudolosowego liczb 8bitowych z górnym
limitem, tj. jak bym chciał sobie wylosować liczbę z zakresu 0-44. Możecie coś
polecić?
Dalej piszesz, że chcesz zmieniać w trakcie, to jedynym rozwiązaniem jest
generator o zakresie pełnych 8 bitów i obcinanie-odrzucanie*) w lepszej
werjsi, a modulo jak checsz mieć liczby ujowe.
*) masz M liczb losowych, a chesz N, bierzesz największe k, takie, że
N*k<M. Losujesz x, jeśli x/k <N x/k jest wynikiem, jeśli nie - repeta.
No to czym generować te 8 bitów? Weź najprostszy generator kongruencyjny
i bierz 8 bitów w miarę z góry.
Co bardzije znane generatorki:
(x * 48271) % 2147483647
(x * 16807) % 2147483647
Modulo 2^31-1. Ciut upierdliwe.
Tu możesz sobie znaleść takie, które są mod 2^k (poza RANDU!)
https://en.wikipedia.org/wiki/Linear_congruential_ge
nerator#Parameters_in_common_use
Dlaczego taki duży stan, mimo, że chcesz tylko 8 bitów?
Bo jeśli stan miałby tylko 8 bitów, generatorek miałby
okres co nauwyżej 256. Dla 16 bitów co najwyżęj 65536. Mało.
Poza i tak rzadko więcej niż połowa bitów takiej liczby zachowuje
się ładnie.
Ładną alternatywą jest też xorshift*.
BTW. Coś mi mówi, że zadałeś nie to pytanie, które chciałeś.
Czy przypadkiem nie istotniejsze jest to, że ma to szybko
banglać na 8 lub 16 bitowym urządzeniu? ;->
Wtedy to zupełnie inny problem.
pzdr
bartekltg