Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #30911 > unrolled thread

Prosty generator pseudolosowy 8bit z limitem

Started byAdam Klobukowski <adamklobukowski@gmail.com>
First post2017-11-28 00:48 -0800
Last post2017-11-30 22:04 -0800
Articles 11 on this page of 51 — 10 participants

Back to article view | Back to pl.comp.programming


Contents

  Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 00:48 -0800
    Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-28 05:13 -0800
      Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-28 05:17 -0800
      Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 01:20 +0100
        Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 09:41 +0100
          Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:12 +0100
        Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-29 00:48 -0800
          Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 10:19 +0100
            Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-29 02:23 -0800
              Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 14:01 +0100
                Re: Prosty generator pseudolosowy 8bit z limitem Stregor <stregor@wytnij.to.gmail.com> - 2017-11-29 14:28 +0100
                Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-30 22:01 -0800
                  Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-02 02:46 +0100
                    Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-12-04 08:34 -0800
                      Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-06 09:58 +0100
                        Re: Prosty generator pseudolosowy 8bit z limitem Roman Tyczka <noemail@because.no> - 2017-12-06 20:14 +0100
                  Re: Prosty generator pseudolosowy 8bit z limitem fir <profesor.fir@gmail.com> - 2017-12-06 01:40 -0800
                    Re: Prosty generator pseudolosowy 8bit z limitem fir <profesor.fir@gmail.com> - 2017-12-06 09:22 -0800
                      Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-12-06 20:07 +0100
                        Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-06 21:27 +0100
                        Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-12-06 21:30 +0100
                          Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-12-07 01:09 +0100
                            Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-06 18:54 -0800
                            Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-06 20:15 -0800
                            Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-08 08:53 -0800
                              Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-12-09 07:27 -0800
              Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 14:04 +0100
              Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:38 +0100
            Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:34 +0100
          Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 19:29 +0100
    Re: Prosty generator pseudolosowy 8bit z limitem szykcech@gmail.com - 2017-11-28 05:50 -0800
      Re: Prosty generator pseudolosowy 8bit z limitem szykcech@gmail.com - 2017-11-28 06:09 -0800
      Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 08:39 -0800
        Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-28 20:13 +0100
          Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 21:59 -0800
            Re: Prosty generator pseudolosowy 8bit z limitem "Radoslaw Szwed" <radekszwed@pochta.fm> - 2017-11-29 07:55 +0100
            Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 18:48 +0100
              Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 20:29 +0100
                Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 20:38 +0100
                  Re: Prosty generator pseudolosowy 8bit z limitem bartekltg <bartekltg@gmail.com> - 2017-11-29 20:43 -0800
        Re: Prosty generator pseudolosowy 8bit z limitem szykcech@gmail.com - 2017-11-28 19:53 -0800
          Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-28 22:00 -0800
          Re: Prosty generator pseudolosowy 8bit z limitem slawek <fake@fakeemail.com> - 2017-11-29 09:44 +0100
        Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-11-29 20:34 +0100
          Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-30 04:57 -0800
            Re: Prosty generator pseudolosowy 8bit z limitem "AK" <nobody@nowhere.net> - 2017-12-01 01:05 +0100
      Re: Prosty generator pseudolosowy 8bit z limitem "M.M." <mmarszik@gmail.com> - 2017-11-29 00:41 -0800
    Re: Prosty generator pseudolosowy 8bit z limitem bartekltg <bartekltg@gmail.com> - 2017-11-29 20:42 -0800
      Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-30 22:04 -0800
    Re: Prosty generator pseudolosowy 8bit z limitem "Radoslaw Szwed" <radekszwed@pochta.fm> - 2017-11-30 07:31 +0100
      Re: Prosty generator pseudolosowy 8bit z limitem Adam Klobukowski <adamklobukowski@gmail.com> - 2017-11-30 22:04 -0800

Page 3 of 3 — ← Prev page 1 2 [3]


#30935

Fromszykcech@gmail.com
Date2017-11-28 19:53 -0800
Message-ID<1693072b-c374-412a-abf3-987e07ca6a3b@googlegroups.com>
In reply to#30926
> Musi to być w miarę proste i szybkie (implementacja bedzie w asemblerze).

Skoro jesteśmy już przy Asemblerze, to może... użyj sprzętowego generatora liczb pseudolosowych. Intel kiedyś (jakieś 15+ lat temu) się chwalił, że używa szumu termicznego i nasłuchiwania na magistral (nie wiem jakich) i z tego dostaje się wartości które są super przypadkowe. Myślę, że do dzisiaj AMD też opanowało tą technologię, tak, że nie jest to rozwiązanie jedynie intelowskie. Myślę, że jest to jakieś urządzenie pod jakimś adresem pamięci, tak, że wystarczy to odczytać 1 instrukcją i już masz dobrą wartość pseudolosową...

[toc] | [prev] | [next] | [standalone]


#30937

FromAdam Klobukowski <adamklobukowski@gmail.com>
Date2017-11-28 22:00 -0800
Message-ID<65175929-983e-4586-a430-77a0d65e5f30@googlegroups.com>
In reply to#30935
W dniu środa, 29 listopada 2017 04:53:41 UTC+1 użytkownik szyk...@gmail.com napisał:
> > Musi to być w miarę proste i szybkie (implementacja bedzie w asemblerze).
> 
> Skoro jesteśmy już przy Asemblerze, to może... użyj sprzętowego generatora 
> liczb pseudolosowych. Intel kiedyś (jakieś 15+ lat temu) się chwalił, że 
> używa szumu termicznego i nasłuchiwania na magistral (nie wiem jakich) i z 
> tego dostaje się wartości które są super przypadkowe. Myślę, że do dzisiaj 
> AMD też opanowało tą technologię, tak, że nie jest to rozwiązanie jedynie 
> intelowskie. Myślę, że jest to jakieś urządzenie pod jakimś adresem pamięci, 
> tak, że wystarczy to odczytać 1 instrukcją i już masz dobrą wartość 
> pseudolosową...

Nic nie pisałem że w asemblerze x86. Więc napiszę: nie w asemblerze x86.

AdamK

[toc] | [prev] | [next] | [standalone]


#30944

Fromslawek <fake@fakeemail.com>
Date2017-11-29 09:44 +0100
Message-ID<almarsoft.3088796336669003341@news.v.pl>
In reply to#30935
On Tue, 28 Nov 2017 19:53:39 -0800 (PST), szykcech@gmail.com wrote:
> Skoro jesteśmy już przy Asemblerze, to może... użyj spr=
> zętowego generatora liczb pseudolosowych. Intel kiedyś (jakie�=
> � 15+ lat temu) się chwalił, że używa szumu termiczne=
> go i nasłuchiwania na magistral (nie wiem jakich) i z tego dostaje 
si=
> ę wartości które są super przypadkowe. Myślę,=


Syf w tym że to nie działało na sprzęcie kupowanym poza USA. 

Dziś można kupić "pendrive" z takim generatorem lub zrobić sobie 
samemu na MCU.

[toc] | [prev] | [next] | [standalone]


#30967

From"AK" <nobody@nowhere.net>
Date2017-11-29 20:34 +0100
Message-ID<ovn24m$4ch$1@node1.news.atman.pl>
In reply to#30926
Użytkownik "Adam Klobukowski" <adamklobukowski@gmail.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 

[toc] | [prev] | [next] | [standalone]


#30977

From"M.M." <mmarszik@gmail.com>
Date2017-11-30 04:57 -0800
Message-ID<aaf4751f-8e07-4d3e-8a3c-d398b36265dc@googlegroups.com>
In reply to#30967
On Wednesday, November 29, 2017 at 8:34:47 PM UTC+1, AK wrote:
> Użytkownik "Adam Klobukowski" <adamklobukowski@gmail.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


[toc] | [prev] | [next] | [standalone]


#30981

From"AK" <nobody@nowhere.net>
Date2017-12-01 01:05 +0100
Message-ID<ovq6ct$utt$1@gioia.aioe.org>
In reply to#30977
Użytkownik "M.M." <mmarszik@gmail.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

[toc] | [prev] | [next] | [standalone]


#30942

From"M.M." <mmarszik@gmail.com>
Date2017-11-29 00:41 -0800
Message-ID<5becdcf4-9a3d-41f6-8843-0c1def8c7ae6@googlegroups.com>
In reply to#30915
On Tuesday, November 28, 2017 at 2:50:58 PM UTC+1, szyk...@gmail.com wrote:
> W dniu wtorek, 28 listopada 2017 09:48:28 UTC+1 użytkownik Adam Klobukowski napisał:
> > 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ć?
> 
> Możecie! A czy Wy czytacie jedyną gazetę programistyczną w Polsze?!?
> Rozwiązanie jest na stronie 21 nr 9/2017:
> 
> #include <random>
> #include <iostream>
> [...]
> 
> 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...

Jeśli ktoś pyta o szybki generator liczb losowych, to rozumiem, że 
bardzo dobrze zna mt i szuka czegoś szybszego, być może kosztem
jakości generowanych liczb. Ale jeśli szybkość mt wystarcza... to
pewnie, należy użyć mt.

[toc] | [prev] | [next] | [standalone]


#30974

Frombartekltg <bartekltg@gmail.com>
Date2017-11-29 20:42 -0800
Message-ID<f06eef58-9aed-49a3-8cc2-660dcf0a4c53@googlegroups.com>
In reply to#30911
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_generator#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
 

[toc] | [prev] | [next] | [standalone]


#30984

FromAdam Klobukowski <adamklobukowski@gmail.com>
Date2017-11-30 22:04 -0800
Message-ID<131e55f7-45ca-4980-ac3d-4318f94fd1db@googlegroups.com>
In reply to#30974
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_generator#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

[toc] | [prev] | [next] | [standalone]


#30976

From"Radoslaw Szwed" <radekszwed@pochta.fm>
Date2017-11-30 07:31 +0100
Message-ID<ovo8li$1sp$1@gioia.aioe.org>
In reply to#30911
Użytkownik "Adam Klobukowski" <adamklobukowski@gmail.com> napisał w wiadomości 
news:aef027f7-2063-41a0-9f50-2136a3fd1032@googlegroups.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)


[toc] | [prev] | [next] | [standalone]


#30985

FromAdam Klobukowski <adamklobukowski@gmail.com>
Date2017-11-30 22:04 -0800
Message-ID<b7adb6bb-96b3-457a-bc00-ddbe1174dc18@googlegroups.com>
In reply to#30976
W dniu czwartek, 30 listopada 2017 07:32:20 UTC+1 użytkownik Radoslaw Szwed napisał:
> Użytkownik "Adam Klobukowski" <adamklobukowski@gmail.com> napisał w wiadomości 
> news:aef027f7-2063-41a0-9f50-2136a3fd1032@googlegroups.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

[toc] | [prev] | [standalone]


Page 3 of 3 — ← Prev page 1 2 [3]

Back to top | Article view | pl.comp.programming


csiph-web