-
1. Data: 2017-11-28 09:48:26
Temat: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...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ć?
AdamK
-
2. Data: 2017-11-28 14:13:56
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "M.M." <m...@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ć?
Za punkt wyjścia bym wziął liniowy lub fibonacciego, potem bym szukał
czy jest jakaś sztuczka na modulo 45... a może kompilator zna odpowiednią
sztuczkę? W miarę ogólnych i jednocześnie dużo szybszych nie znajdziesz.
Dobre generatory są bardzo wolne w porównaniu do tych dwóch. Generator
fibonaccigo jest ciekawostką, jest szybki i może być bardzo dobry,
niestety ma dwa problemy: wymaga trochę pamięci, inicjacja trochę
czasu trwa i nie ma dowodów matematycznych gwarantujących rozkład.
Pozdrawiam
-
3. Data: 2017-11-28 14:17:29
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "M.M." <m...@g...com>
On Tuesday, November 28, 2017 at 2:13:57 PM UTC+1, M.M. wrote:
> inicjacja trochę czasu trwa
Właśnie, ile chcesz liczb wygenerować? Jeśli robisz inicjalizację i potem
generujesz mało liczb (np. 100), to generator fibonacciego też będzie bardzo
wolny. Fibonacciego działa szybko od minimum 1tys liczb ( w przeliczeniu
na jedną liczbę - rzecz jasna)
Pozdrawiam
-
4. Data: 2017-11-28 14:50:57
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: s...@g...com
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...
-
5. Data: 2017-11-28 15:09:27
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: s...@g...com
> gwarantuje rozkład normalny otrzymywanych liczb...
Raczej rozkład liniowy...
-
6. Data: 2017-11-28 17:39:13
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu wtorek, 28 listopada 2017 14:50:58 UTC+1 użytkownik s...@g...com napisał:
> 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...
Dzięki, ale ja nie chcę C, C++, ani C++11.
Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko przykladowo i podczas
generacji kolejnych bedzie się zmieniał. Musi to być w miarę proste i szybkie
(implementacja bedzie w asemblerze).
AdamK
-
7. Data: 2017-11-28 20:13:33
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Tue, 28 Nov 2017 08:39:13 -0800 (PST), Adam Klobukowski
<a...@g...com> wrote:
> Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko
przykladowo=
> i podczas generacji kolejnych bedzie się zmieniał. Musi to by?=
> ? w miarę proste i szybkie (implementacja bedzie w asemblerze).
Primo, dlaczego w Asemblerze? Secundo, tego rodzaju kawałki ogólnie
są proste, nie ma różnicy czy będzie trochę więcej jakichś add czy
mul
-
8. Data: 2017-11-29 01:20:36
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "AK" <n...@n...net>
Użytkownik "M.M." <m...@g...com> napisał:
> Za punkt wyjścia bym wziął liniowy lub fibonacciego, potem bym szukał
> czy jest jakaś sztuczka na modulo 45... a może kompilator zna odpowiednią
> sztuczkę?
A po cholere jakies sztuczki?
Majac generator o rozkladzie jednostajnym (czyli <0, 1) ) przez proste skalowanie
otrzymuje
sie generator w potrzebnym przedziale.
Generalnie na podstawie generatora jednostajnego droga obliczania odwrotnej
dystrubuanty
mozna otrzymac generator o innym rockladzie niz jednostajny.
PS: W "moich czasach" standard to byla ksiazka Zielinski ""Generatory liczb
pseudolosowych"
czy jakos tak.
AK
-
9. Data: 2017-11-29 04:53:39
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: s...@g...com
> 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ą...
-
10. Data: 2017-11-29 06:59:19
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu wtorek, 28 listopada 2017 20:13:36 UTC+1 użytkownik slawek napisał:
> On Tue, 28 Nov 2017 08:39:13 -0800 (PST), Adam Klobukowski
> <a...@g...com> wrote:
> > Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko
> przykladowo=
> > i podczas generacji kolejnych bedzie się zmieniał. Musi to by?=
> > ? w miarę proste i szybkie (implementacja bedzie w asemblerze).
>
>
> Primo, dlaczego w Asemblerze? Secundo, tego rodzaju kawałki ogólnie
> są proste, nie ma różnicy czy będzie trochę więcej jakichś add czy
> mul
Takie widzimisie.
AdamK