-
21. Data: 2021-08-21 17:51:17
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "o...@g...com" <o...@g...com>
Co ma zwracać mój program? Bo generator:
> //Dla 128 bitów
> return ( next = (prev * a + b) ) >> 96;
>
> //Dla 64 bitów
> return ( next = (prev * a + b) ) >> 32;
>
Nie zwraca bitu po bicie. Nie będzie zwracał nawet liczb w postaci binarnej, tylko
dziesiętnej.
-
22. Data: 2021-08-21 18:30:35
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "M.M." <m...@g...com>
On Saturday, August 21, 2021 at 5:51:18 PM UTC+2, o...@g...com wrote:
> Co ma zwracać mój program? Bo generator:
> > //Dla 128 bitów
> > return ( next = (prev * a + b) ) >> 96;
> >
> > //Dla 64 bitów
> > return ( next = (prev * a + b) ) >> 32;
> >
> Nie zwraca bitu po bicie. Nie będzie zwracał nawet liczb w postaci binarnej, tylko
dziesiętnej.
Trzeba zamienić na bity, potem na ascii i potem można przetestować konwerter - co
robi ten program:
https://github.com/mmarszik/SimpPRNG/blob/main/main.
cpp
Pozdrawiam
-
23. Data: 2021-08-21 19:16:12
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "o...@g...com" <o...@g...com>
A czy mój generator może być napisany w Pythonie? I czy pojedyncze wywołanie
generatora ma dawać pojedynczy bit, czy może dawać np. liczbę 128-bitową zapisaną
binarnie "01010101...11110101"? Jak bity zamienić na ascii?
-
24. Data: 2021-08-21 21:24:24
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "o...@g...com" <o...@g...com>
Mam w tej chwili funkcję w Pythonie, która zwraca kolejno liczby 128-bitowe:
192066077656580258942348540382114420378
32279351617202730688729077252496792396
297915430637496012930348761181422042536
159283604400744055638172460588895391056
220821713004509824228660973423179477929
265401964602247200657488762091495142036
121949887341620150952131667637044765657
Mogę ją wywołać zadeklarowaną liczbę razy. Mogę to też przekształcić na bity:
1001000001111110100101001011111000011110011000110111
0000110101100001110110000100111010001001101001010101
000001110001011010011010
1100001001000110001101110100010010110010011000101000
1101110111011010001010101110100010101010010011011111
000111001101101001100
1110000000100000011011001100010010101100000010101111
1010111000111011010101011010100111000001100110011010
111000110011110110101000
1110111110101001110100000000101101010111100010110011
0100100001100000011001001010001001010101111010100100
11101010100110101010000
1010011000100000101101110000011010011100011011110101
0000010011001010010010100110000011000110010000110011
101001100011001110101001
1100011110101010100011110010000010110010011011111100
1110101100100001111101011001100001010000000111000110
111000101011001010010100
1011011101111101011000110101000010100011000111000010
0100111101010011101111000110010011011110100010100000
00101111110001111011001
I pewnie dam radę to pociąć na pojedyncze bity. Tak, żeby wypisywać:
1
0
0
1
0
0
0
Z każdym powtórzeniem. Mam nadzieję, że ten konwerter nie musi sam wywoływać programu
n razy, tylko wystarczy, że program wywołany raz wygeneruje strumień bitów.
-
25. Data: 2021-08-21 21:48:48
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "M.M." <m...@g...com>
On Saturday, August 21, 2021 at 9:24:25 PM UTC+2, o...@g...com wrote:
> Mam w tej chwili funkcję w Pythonie, która zwraca kolejno liczby 128-bitowe:
>
> 192066077656580258942348540382114420378
> 32279351617202730688729077252496792396
> 297915430637496012930348761181422042536
> 159283604400744055638172460588895391056
> 220821713004509824228660973423179477929
> 265401964602247200657488762091495142036
> 121949887341620150952131667637044765657
>
> Mogę ją wywołać zadeklarowaną liczbę razy. Mogę to też przekształcić na bity:
>
> 1001000001111110100101001011111000011110011000110111
0000110101100001110110000100111010001001101001010101
000001110001011010011010
> 1100001001000110001101110100010010110010011000101000
1101110111011010001010101110100010101010010011011111
000111001101101001100
> 1110000000100000011011001100010010101100000010101111
1010111000111011010101011010100111000001100110011010
111000110011110110101000
> 1110111110101001110100000000101101010111100010110011
0100100001100000011001001010001001010101111010100100
11101010100110101010000
> 1010011000100000101101110000011010011100011011110101
0000010011001010010010100110000011000110010000110011
101001100011001110101001
> 1100011110101010100011110010000010110010011011111100
1110101100100001111101011001100001010000000111000110
111000101011001010010100
> 1011011101111101011000110101000010100011000111000010
0100111101010011101111000110010011011110100010100000
00101111110001111011001
>
> I pewnie dam radę to pociąć na pojedyncze bity. Tak, żeby wypisywać:
>
> 1
> 0
> 0
> 1
> 0
> 0
> 0
>
> Z każdym powtórzeniem. Mam nadzieję, że ten konwerter nie musi sam wywoływać
programu n razy, tylko wystarczy, że program wywołany raz wygeneruje strumień bitów.
Poniższe polecenie shell raz uruchamia konwerter, a konwerter działa do póki może
czytać i pisać ze standardowego wejścia/wyjścia.
./Generator | ./Konwerter | ./Tester
Konwerter czyta zera i jedynki w formacie ASCII, nie toleruje żadnych innych znaków
(spacji, enterów, etc).
Pozdrawiam
-
26. Data: 2021-08-21 21:57:25
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "M.M." <m...@g...com>
On Saturday, August 21, 2021 at 7:16:13 PM UTC+2, o...@g...com wrote:
> A czy mój generator może być napisany w Pythonie? I czy pojedyncze wywołanie
generatora ma dawać pojedynczy bit, czy może dawać np. liczbę 128-bitową zapisaną
binarnie "01010101...11110101"? Jak bity zamienić na ascii?
Zrozumiałem, że masz gotowy program (plik) co generuje ciąg zer i jedynek w formacie
tekstowym
(innymi słowy w formacie ASCII). Obojętnie skąd pochodzą te zera i jedynki -
konwerter zadziała i
w dodatku powinien zadziałać poprawnie, bo przeszedł jeden test. Program może być
napisany w
czymkolwiek, w Pythonie, w Javie, w C++, albo możesz odczytać do konwertera dane z
pliku przy
pomocy polecenia bash/shell:
cat plik_tekstowy_zer_i_jedynek.txt | ./konwerter | ./tester
Tylko plik musi być duży żeby to miało sens, np. cały duży dysk 1-100TB.
Lepiej dać prosto z programu, bez zapisywania do pliku:
./Twój_program | ./konwerter | ./tester
-
27. Data: 2021-08-21 22:55:34
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "o...@g...com" <o...@g...com>
sobota, 21 sierpnia 2021 o 21:57:26 UTC+2 M.M. napisał(a):
> On Saturday, August 21, 2021 at 7:16:13 PM UTC+2, o...@g...com wrote:
> > A czy mój generator może być napisany w Pythonie? I czy pojedyncze wywołanie
generatora ma dawać pojedynczy bit, czy może dawać np. liczbę 128-bitową zapisaną
binarnie "01010101...11110101"? Jak bity zamienić na ascii?
> Zrozumiałem, że masz gotowy program (plik) co generuje ciąg zer i jedynek w
formacie tekstowym
> (innymi słowy w formacie ASCII).
Tak. Czy program ma wypisywać te zera i jedynki za pomocą printa, czy po prostu
wywołanie funkcji ma je generować, a print nie jest potrzebny? I czy muszę to ciąć
tak, żeby program wypisywał:
1
0
0
1
Czy może wypisywać liczba po liczbie w formacie binarnym:
1001000001111110100101001011111000011110011000110111
0000110101100001110110000100111010001001101001010101
000001110001011010011010
1100001001000110001101110100010010110010011000101000
1101110111011010001010101110100010101010010011011111
000111001101101001100
1110000000100000011011001100010010101100000010101111
1010111000111011010101011010100111000001100110011010
111000110011110110101000
1110111110101001110100000000101101010111100010110011
0100100001100000011001001010001001010101111010100100
11101010100110101010000
Po uruchomieniu komendy:
Mojgenerator.py | ./Konwerter.exe | ./RNG_test stdin
Dostaję komunikat:
"Mojgenerator.py: command not found
RNG_test using PractRand version 0.93
RNG = RNG_stdin, seed = 0xe345c308
test set = normal, folding = standard(unknown format)
Segmentation fault (core dumped)"
Niezależnie, czy wpiszę Mojgenerator, Mojgenerator.py, czy Mojgenerator.exe.
-
28. Data: 2021-08-21 22:58:45
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "o...@g...com" <o...@g...com>
PS Gdy program wypisuje:
1001000001111110100101001011111000011110011000110111
0000110101100001110110000100111010001001101001010101
000001110001011010011010
1100001001000110001101110100010010110010011000101000
1101110111011010001010101110100010101010010011011111
000111001101101001100
1110000000100000011011001100010010101100000010101111
1010111000111011010101011010100111000001100110011010
111000110011110110101000
1110111110101001110100000000101101010111100010110011
0100100001100000011001001010001001010101111010100100
11101010100110101010000
tak naprawdę nie ma nigdzie żadnego znaku nowej linii, czy wiersza.
-
29. Data: 2021-08-21 23:22:32
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "M.M." <m...@g...com>
On Saturday, August 21, 2021 at 10:58:46 PM UTC+2, o...@g...com wrote:
> PS Gdy program wypisuje:
>
> 1001000001111110100101001011111000011110011000110111
0000110101100001110110000100111010001001101001010101
000001110001011010011010
> 1100001001000110001101110100010010110010011000101000
1101110111011010001010101110100010101010010011011111
000111001101101001100
> 1110000000100000011011001100010010101100000010101111
1010111000111011010101011010100111000001100110011010
111000110011110110101000
> 1110111110101001110100000000101101010111100010110011
0100100001100000011001001010001001010101111010100100
11101010100110101010000
>
> tak naprawdę nie ma nigdzie żadnego znaku nowej linii, czy wiersza.
To powinno zadziałać.
-
30. Data: 2021-08-21 23:31:13
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "M.M." <m...@g...com>
On Saturday, August 21, 2021 at 10:55:35 PM UTC+2, o...@g...com wrote:
> sobota, 21 sierpnia 2021 o 21:57:26 UTC+2 M.M. napisał(a):
> > On Saturday, August 21, 2021 at 7:16:13 PM UTC+2, o...@g...com wrote:
> > > A czy mój generator może być napisany w Pythonie? I czy pojedyncze wywołanie
generatora ma dawać pojedynczy bit, czy może dawać np. liczbę 128-bitową zapisaną
binarnie "01010101...11110101"? Jak bity zamienić na ascii?
> > Zrozumiałem, że masz gotowy program (plik) co generuje ciąg zer i jedynek w
formacie tekstowym
> > (innymi słowy w formacie ASCII).
> Tak. Czy program ma wypisywać te zera i jedynki za pomocą printa, czy po prostu
wywołanie funkcji ma je generować, a print nie jest potrzebny? I czy muszę to ciąć
tak, żeby program wypisywał:
> 1
> 0
> 0
> 1
Rozmawialiśmy kilka postów wcześniej w ten sposób:
[
> > Teraz nie mogę, potem dam kod program który przekonwertuje plik tekstowy do
binarnego. Proszę, pokaż ( i jeśli trzeba to opisz )
> > jak wygląda oryginalny plik tekstowy.
> Jeżeli zapisuję dane to pliku .txt, to wygląda to tak:
> "010101010101000101111010101010101110100101111101011
0111110...010101010101010100101010101010010101010101
00101010101011111"
> Po prostu pseudolosowy ciąg zer i jedynek, nic więcej.
]
Więc konwerter takie dane umie odczytać i zamienia je na format binarny dla
PractRand. To co zapisujesz do pliku, po prostu
wyświetl teraz na konsolę (a nie do pliku). Konwerter to odczyta z konsoli i poda
dalej do PractRand. Tylko trzeba te trzy
programy połączyć komendą shell:
TwójProgram | Konwerter | PractRand
> Czy może wypisywać liczba po liczbie w formacie binarnym:
Jeśli w formacie binarnym, to nie jest potrzebny żaden konwerter. Wystarczy użyć
TwójProgram | PractRand
>
> 1001000001111110100101001011111000011110011000110111
0000110101100001110110000100111010001001101001010101
000001110001011010011010
> 1100001001000110001101110100010010110010011000101000
1101110111011010001010101110100010101010010011011111
000111001101101001100
> 1110000000100000011011001100010010101100000010101111
1010111000111011010101011010100111000001100110011010
111000110011110110101000
> 1110111110101001110100000000101101010111100010110011
0100100001100000011001001010001001010101111010100100
11101010100110101010000
>
> Po uruchomieniu komendy:
>
> Mojgenerator.py | ./Konwerter.exe | ./RNG_test stdin
>
> Dostaję komunikat:
>
> "Mojgenerator.py: command not found
> RNG_test using PractRand version 0.93
> RNG = RNG_stdin, seed = 0xe345c308
> test set = normal, folding = standard(unknown format)
>
> Segmentation fault (core dumped)"
>
> Niezależnie, czy wpiszę Mojgenerator, Mojgenerator.py, czy Mojgenerator.exe.
Konwerter się wywali jeśli dostanie na wejście cokolwiek innego niż znak ASCII '0'
lub '1'.
Pozdrawiam