-
31. Data: 2017-11-30 05:43:38
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: bartekltg <b...@g...com>
On Wednesday, November 29, 2017 at 8:38:38 PM UTC+1, AK wrote:
> 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...
> :(
RANDU ;-)
pzdr
bartekltg
-
32. Data: 2017-11-30 07:31:39
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "Radoslaw Szwed" <r...@p...fm>
Użytkownik "Adam Klobukowski" <a...@g...com> napisał w wiadomości
news:aef027f7-2063-41a0-9f50-2136a3fd1032@googlegrou
ps.com...
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ć?
Mały (16 bajtów na x86) szybki generator liczb pseudolosowych generujący wartości
losowe od 0-255.
Wprowadzenie limitu chyba nie będzie problemem dlatego go nie uwzględniłem.
Generowane liczby zależą od wartości początkowej rnd i wartości używanej przy
rozkazie xor. Dla poniższych ustawień kod generuje 254 różne wartości.
Żadna z wartości się nie powtórzy dopóki wszystkie nie zostaną wygenerowane.
Można zamiast $e7 użyć $71, $7f, $e9 dają równie dobre rezultaty.
Przeniesienie poniższego kodu na Motorolę (Amiga/Atari ST),
MOS 6502 (Atari 8bit/C64) czy "ARMa" nie powinno stanowić kłopotu.
W przypadku problemów dołączyłem komentarze.
rnd db 20 ; wartość początkowa
mov al, rnd ; załadowanie zmiennej do akumulatora
sal al, 1 ; przesuniecie bitów w akumulatorze o 1 w lewo najstarszy bit
wpada do c
jc pomin ; jeżeli c=1 skocz do pomin
xor al, $e7 ; suma symetryczna
pomin:
mov rnd, al ; akumulator do rnd (wartość pseudolosowa)
-
33. Data: 2017-11-30 13:57:24
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "M.M." <m...@g...com>
On Wednesday, November 29, 2017 at 8:34:47 PM UTC+1, AK wrote:
> 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
Jeśli wydajność generatora nie jest ważna, a są potrzebne dobre losowe
liczby, to bym nigdy nie użył MT. MT jest czymś pośrednim pomiędzy
dobrym a wydajnym generatorem. MT nie przechodzi diehardera.
Pozdrawiam
-
34. Data: 2017-12-01 01:05:18
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "M.M." <m...@g...com> napisał:
>> Dostales (prawie)najlepsze (std::mt19937) z mozliwych istniejacych rozwiazan i
marudzisz eh...
>>
>> AK
> Jeśli wydajność generatora nie jest ważna, a są potrzebne dobre losowe liczby, to
bym nigdy nie
> użył MT.
> MT jest czymś pośrednim pomiędzy dobrym a wydajnym generatorem.
No i _wlasnie dlatego_ jest najlepszy w kontekscie problemu pytacza.
Zacznie robic sam , to bedzie super szybkie ale.. do d.. (maly okres).
Zechce zrobic porzadnie, to szybkosc szlag trafi.
AK
-
35. Data: 2017-12-01 07:01:52
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu środa, 29 listopada 2017 14:01:44 UTC+1 użytkownik slawek napisał:
> 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).
Heh. Mnie chodzi o najprostszy generatow liczb pseudolosowych. Nie będe go nijak
testował (poza 'na oko') bo nie będzie na nim wisieć los wszechświata, kluczy
szyfrujących też nie będę nim generował. Po prostu potrzebuję czegoś co pozwoli łatwo
i w miare szybko wygenerowć ca. 1M liczb z odpowiednich zakresów.
> 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.
Tak, chcę szybko i byle jak. Jak już napisałem wyżej - nie piszę nic krytycznego.
> A książek nie będziesz czytać bo nie. Też zupełnie gites.
Nic takiego nigdzie nie napisałem.
AdamK
-
36. Data: 2017-12-01 07:04:14
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu czwartek, 30 listopada 2017 05:42:24 UTC+1 użytkownik bartekltg napisał:
> 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
O, dzieki, o coś takiego mi chodziło :D
AdamK
-
37. Data: 2017-12-01 07:04:40
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu czwartek, 30 listopada 2017 07:32:20 UTC+1 użytkownik Radoslaw Szwed napisał:
> Użytkownik "Adam Klobukowski" <a...@g...com> napisał w wiadomości
> news:aef027f7-2063-41a0-9f50-2136a3fd1032@googlegrou
ps.com...
> 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ć?
>
> Mały (16 bajtów na x86) szybki generator liczb pseudolosowych generujący wartości
losowe od 0-255.
> Wprowadzenie limitu chyba nie będzie problemem dlatego go nie uwzględniłem.
>
> Generowane liczby zależą od wartości początkowej rnd i wartości używanej przy
> rozkazie xor. Dla poniższych ustawień kod generuje 254 różne wartości.
> Żadna z wartości się nie powtórzy dopóki wszystkie nie zostaną wygenerowane.
> Można zamiast $e7 użyć $71, $7f, $e9 dają równie dobre rezultaty.
>
> Przeniesienie poniższego kodu na Motorolę (Amiga/Atari ST),
> MOS 6502 (Atari 8bit/C64) czy "ARMa" nie powinno stanowić kłopotu.
> W przypadku problemów dołączyłem komentarze.
>
> rnd db 20 ; wartość początkowa
>
> mov al, rnd ; załadowanie zmiennej do akumulatora
> sal al, 1 ; przesuniecie bitów w akumulatorze o 1 w lewo najstarszy bit
wpada do c
> jc pomin ; jeżeli c=1 skocz do pomin
> xor al, $e7 ; suma symetryczna
> pomin:
> mov rnd, al ; akumulator do rnd (wartość pseudolosowa)
Dzięki :)
AdamK
-
38. Data: 2017-12-02 02:46:51
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Thu, 30 Nov 2017 22:01:52 -0800 (PST), Adam Klobukowski
<a...@g...com> wrote:
> Nic takiego nigdzie nie napisałem.
A konkretnie: jakie książki przeczytałeś?
-
39. Data: 2017-12-04 17:34:54
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu sobota, 2 grudnia 2017 02:46:52 UTC+1 użytkownik slawek napisał:
> On Thu, 30 Nov 2017 22:01:52 -0800 (PST), Adam Klobukowski
> <a...@g...com> wrote:
> > Nic takiego nigdzie nie napisałem.
>
> A konkretnie: jakie książki przeczytałeś?
Ostatnio? 'Viriona' Ziemańskiego. Ale już następne się piętrzą przedemną.
AdamK
-
40. Data: 2017-12-06 09:58:36
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Mon, 4 Dec 2017 08:34:54 -0800 (PST), Adam Klobukowski
<a...@g...com> wrote:
> Ostatnio? 'Viriona' Ziemańskiego.
A co w niej piszą o generatorach liczb pseudolosowych?