🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.programming
100 messages
100 total messages Page 1 of 2 Started by osobli... Thu, 19 Aug 2021 16:15
Page 1 of 2 • 100 total messages
Jak zrobić test za pomocą PractRand?
#217476
Author: osobli...
Date: Thu, 19 Aug 2021 16:15
32 lines
2308 bytes
Czy ktoś z Was robił testy generatorów liczb pseudolosowych za pomocą PractRand?

Przeczytałem instrukcje stąd:

https://www.pcg-random.org/posts/how-to-test-with-practrand.html

I zrobiłem build process na konsoli Ubuntu na Windowsie. Chcę jednak zrobić test mojego własnego generatora. Rozumiem, że muszę napisać kod w C++.  Skopiowałem kod:

#include <cstdio>
#include <cstdint>

#include <random>

int main()
{
    freopen(NULL, "wb", stdout);  // Only necessary on Windows, but harmless. 

    std::mt19937 rng(42);

    while (1) {
        uint32_t value = rng();
        fwrite((void*) &value, sizeof(value), 1, stdout);
    }
}

ale nie udało mi się go skompilować. Wynik:

g++: error: mt19937-min.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.

Nie wiem właściwie nic o C++, znam podstawy programowania w Pythonie, więc może coś robię źle? Niemniej, kod mojego generatora w C++ jakoś sobie prędzej, czy później napiszę, choć liczyłem, że będzie można użyć pliku txt z wygenerowanymi już liczbami. Najważniejsze jest dla mnie jak to uruchomić.
Re: Jak zrobić test za pomocą PractRand?
#217477
Author: osobli...
Date: Thu, 19 Aug 2021 22:38
17 lines
2712 bytes
g++: error: mt19937-min.cpp: No such file or directory 
g++: fatal error: no input files 
compilation terminated. 

To błąd z kompilacją, a nie z samym testem. Błąd tak powszechny i beznadziejny, że uznałem, iż prędzej zainstaluję VS i to skompiluję, niż naprawię ten błąd (internetowe poradniki są albo nie działają albo są niezrozumiałe). Pozostaje mieć nadzieję, że kiedyś ktoś w Linuxie zrobi z tym porządek. Zresztą, jeśli mam napisać i kompilować program w C++ i tak przyda mi się VS.

Same testy dają się odpalić, wczytałem plik z liczbami, ale coś jest nie tak:

rng=RNG_stdin, seed=0x1687c235
length= 256 megabytes (2^28 bytes), time= 2.8 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-2,T)                  R=+15927312 p = 0           FAIL !!!!!!!!
  BCFN(2+1,13-2,T)                  R=+11593600 p = 0           FAIL !!!!!!!!
  BCFN(2+2,13-3,T)                  R=+8011486 p = 0           FAIL !!!!!!!!
  BCFN(2+3,13-3,T)                  R=+3903870 p = 0           FAIL !!!!!!!!

Nie wiem nawet, czy liczby w pliku są w odpowiednim formacie (32-bitowe wypisane jedna pod drugą) i nie mogę się doszukać w jakim mają być formacie.
Re: Jak zrobić test za pomocą PractRand?
#217478
Author: osobli...
Date: Fri, 20 Aug 2021 02:16
11 lines
1836 bytes
Dane muszą być w formacie binarnym:

https://www.researchgate.net/publication/340214294_A_Practical_Approach_to_Testing_Random_Number_Generators_in_Computer_Algebra_Systems

"For testing data from a file, the fol-lowing command can be used:

cat file.data | RNG_test stdin64

The data in the file must be binary; text files are not supported."

Ale nie mogą być w pliku txt, tylko .data. Pytanie jak zapisać coś w formacie .data, w szczególności w Pythonie?
Re: Jak zrobić test za pomocą PractRand?
#217479
Author: M.M.
Date: Fri, 20 Aug 2021 13:04
49 lines
3140 bytes
On Thursday, August 19, 2021 at 6:15:26 PM UTC+2, osobli...@gmail.com wrote:
> Czy ktoś z Was robił testy generatorów liczb pseudolosowych za pomocą PractRand? 

Jeśli chce Ci się czytać C++ to możesz zobaczyć jak ja to zrobiłem:

https://github.com/mmarszik/MRndCPP

https://github.com/mmarszik/MRndCPP/blob/master/tests/test.sh
 { time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time

https://github.com/mmarszik/MRndCPP/blob/master/test01.cpp
fwrite( buf, 1, sizeof(buf), stdout );


> 
> Przeczytałem instrukcje stąd: 
> 
> https://www.pcg-random.org/posts/how-to-test-with-practrand.html 
> 
> I zrobiłem build process na konsoli Ubuntu na Windowsie. Chcę jednak zrobić test mojego własnego generatora. Rozumiem, że muszę napisać kod w C++. Skopiowałem kod: 
> 
> #include <cstdio> 
> #include <cstdint> 
> 
> #include <random> 
> 
> int main() 
> { 
> freopen(NULL, "wb", stdout); // Only necessary on Windows, but harmless. 
> 
> std::mt19937 rng(42); 
> 
> while (1) { 
> uint32_t value = rng(); 
> fwrite((void*) &value, sizeof(value), 1, stdout); 
> } 
> } 
> 
> ale nie udało mi się go skompilować. Wynik: 
> 
> g++: error: mt19937-min.cpp: No such file or directory 
> g++: fatal error: no input files 
> compilation terminated. 
> 
> Nie wiem właściwie nic o C++, znam podstawy programowania w Pythonie, więc może coś robię źle? Niemniej, kod mojego generatora w C++ jakoś sobie prędzej, czy później napiszę, choć liczyłem, że będzie można użyć pliku txt z wygenerowanymi już liczbami. Najważniejsze jest dla mnie jak to uruchomić.

Słyszałem że temat generowania liczb pseudo-losowych jest bardzo trudny :/

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217480
Author: osobli...
Date: Fri, 20 Aug 2021 14:53
19 lines
3215 bytes
piątek, 20 sierpnia 2021 o 15:04:14 UTC+2 M.M. napisał(a):
> On Thursday, August 19, 2021 at 6:15:26 PM UTC+2, osobli...@gmail.com wrote: 
> > Czy ktoś z Was robił testy generatorów liczb pseudolosowych za pomocą PractRand?
> Jeśli chce Ci się czytać C++ to możesz zobaczyć jak ja to zrobiłem: 
> 
> https://github.com/mmarszik/MRndCPP 
> 
> https://github.com/mmarszik/MRndCPP/blob/master/tests/test.sh 
> { time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time 
> 
> https://github.com/mmarszik/MRndCPP/blob/master/test01.cpp 
> fwrite( buf, 1, sizeof(buf), stdout );

Nic z tego nie rozumiem, ani nawet nie wiem od czego zacząć. Co robi Twój kod? Bo podstawowe pytanie jakie mam to co ma zwracać program do PractRand? Domyślam się, że ma generować bit po bicie, czyli pojedyncze wywołanie powinno generować jeden psudolosowy bit. 

> > Nie wiem właściwie nic o C++, znam podstawy programowania w Pythonie, więc może coś robię źle? Niemniej, kod mojego generatora w C++ jakoś sobie prędzej, czy później napiszę, choć liczyłem, że będzie można użyć pliku txt z wygenerowanymi już liczbami. Najważniejsze jest dla mnie jak to uruchomić.
> Słyszałem że temat generowania liczb pseudo-losowych jest bardzo trudny :/ 

Moje generatory zdają wszystkie testy Dieharder, szukam więc czegoś bardziej wymagającego. Także mam już generatory, które działają, zresztą generatorów, które istnieją i można modyfikować na wiele sposobów również jest pod dostatkiem. Co do zasady jest to trudne i trzeba wiedzieć co się robi, ale z tym problemem już się uporałem. Większe wyzwanie stanowi dla mnie C++ (ten język chyba już na poziomie projektowania stawiał sobie za bycie nieprzejrzystym i inkluzywnym) i dokumentacja PractRand.
Re: Jak zrobić test za pomocą PractRand?
#217481
Author: M.M.
Date: Fri, 20 Aug 2021 15:09
39 lines
4594 bytes
On Friday, August 20, 2021 at 4:53:25 PM UTC+2, osobli...@gmail.com wrote:
> piątek, 20 sierpnia 2021 o 15:04:14 UTC+2 M.M. napisał(a): 
> > On Thursday, August 19, 2021 at 6:15:26 PM UTC+2, osobli...@gmail.com wrote: 
> > > Czy ktoś z Was robił testy generatorów liczb pseudolosowych za pomocą PractRand? 
> > Jeśli chce Ci się czytać C++ to możesz zobaczyć jak ja to zrobiłem: 
> > 
> > https://github.com/mmarszik/MRndCPP 
> > 
> > https://github.com/mmarszik/MRndCPP/blob/master/tests/test.sh 
> > { time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time 
> > 
> > https://github.com/mmarszik/MRndCPP/blob/master/test01.cpp 
> > fwrite( buf, 1, sizeof(buf), stdout );
> Nic z tego nie rozumiem, ani nawet nie wiem od czego zacząć. Co robi Twój kod? Bo podstawowe pytanie jakie mam to co ma zwracać program do PractRand? Domyślam się, że ma generować bit po bicie, czyli pojedyncze wywołanie powinno generować jeden psudolosowy bit.
> > > Nie wiem właściwie nic o C++, znam podstawy programowania w Pythonie, więc może coś robię źle? Niemniej, kod mojego generatora w C++ jakoś sobie prędzej, czy później napiszę, choć liczyłem, że będzie można użyć pliku txt z wygenerowanymi już liczbami. Najważniejsze jest dla mnie jak to uruchomić. 
> > Słyszałem że temat generowania liczb pseudo-losowych jest bardzo trudny :/
> Moje generatory zdają wszystkie testy Dieharder, szukam więc czegoś bardziej wymagającego. Także mam już generatory, które działają, zresztą generatorów, które istnieją i można modyfikować na wiele sposobów również jest pod dostatkiem. Co do zasady jest to trudne i trzeba wiedzieć co się robi, ale z tym problemem już się uporałem. Większe wyzwanie stanowi dla mnie C++ (ten język chyba już na poziomie projektowania stawiał sobie za bycie nieprzejrzystym i inkluzywnym) i dokumentacja PractRand.

Odnośnie C++ właśnie wkleiłem kluczową linię kodu:
fwrite( buf, 1, sizeof(buf), stdout );
Lina ta wywala binarnie bufor na standardowe wyjście, wcześniej trzeba go zapełnić binarnymi danymi. W pliku do którego 
dałem link jest pełny przykład.

Odnośnie Practrand ta linia jest kluczowa:
{ time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time 
Przekierowuje ona standardowe wyjście programu do programu PractRand, reszta to opcje, pomiar czasu, przekierowanie wyników.

W skrócie, jeśli PractRand jest w tym samym katalogu co program, uruchamia się to tak:
./Program | ./PractRand stdin [tu wpisz opcje PractRand]

Jeśli dane są w pliku binarnym to tak:
cat dane_binarne.bin | ./PractRand stdin [tu wpisz opcje PractRand]

Jeśli w są w tekstowym, to np. tak (nie wiem czy można prościej, by musiała być odpowiednia
opcja PractRand i odpowiedni format danych tekstowych - może jest):
cat dane_tekstowe.txt | ./zamien_na_binarne | ./PractRand stdin [tu wpisz opcje PractRand]
Ale program który poprawnie zamieni Twoje dane tekstowe na dane binarne musisz napisać sobie sam.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217482
Author: osobli...
Date: Fri, 20 Aug 2021 16:14
142 lines
12611 bytes
> Odnośnie C++ właśnie wkleiłem kluczową linię kodu:
> fwrite( buf, 1, sizeof(buf), stdout );
> Lina ta wywala binarnie bufor na standardowe wyjście, wcześniej trzeba go zapełnić binarnymi danymi. W pliku do którego 
> dałem link jest pełny przykład.
> 
> Odnośnie Practrand ta linia jest kluczowa:
> { time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time
> Przekierowuje ona standardowe wyjście programu do programu PractRand, reszta to opcje, pomiar czasu, przekierowanie wyników. 
> 
> W skrócie, jeśli PractRand jest w tym samym katalogu co program, uruchamia się to tak: 
> ./Program | ./PractRand stdin [tu wpisz opcje PractRand] 

Wydaje mi się, że prędzej, niż ogarnę C++ zrobię odpowiedni plik. Przepisanie kodu z Pythona do C++ musiałbym raczej komuś zlecić. Także chyba z pisaniem programu w C++ dam sobie spokój (tym bardziej, że mój program wykonuje operacje na liczbach 128-bitowych, a C++ takich nie obsługuje, zaś zainstalowanie odpowiedniej biblioteki do obsługi tak dużych liczb, to już jest dla mnie zadanie na długie tygodnie, może miesiące, bez gwarancji sukcesu - gdy próbowałem zrobić to lata temu nie udało się). Pytanie, czy będę w stanie wygenerować odpowiedni plik w odpowiednim czasie (bo pomimo, że generatory, które testuję są jednymi z najszybszych na świecie, co do zasady są podobne do PCG generators, to Python nie dość, że bywa 50-100 razy wolniejszy niż C++, to jeszcze do tego sam zapis do pliku trwa długo i jak szybki nie byłby generator - nie da się tego procesu przyspieszyć). Ile PractRand potrzebuje danych?

Dieharder przykładowo potrzebował 32-bitowe liczby wypisane jedna pod drugą w ilości blisko 50 GB (których zapisanie do pliku i wygenerowanie trwało kilka godzin), żeby generator nie oblewał testów (gdy danych było za mało plik był zawijany i do testów był brane w kółko te same liczby, do powodowało oblewanie testów). A i tak zawijał niektóre próbki, tzw. " rewounds".

> Jeśli dane są w pliku binarnym to tak: 
> cat dane_binarne.bin | ./PractRand stdin [tu wpisz opcje PractRand] 

Jak utworzyć plik .bin? Mam 50GB danych binarnych, to jest zera i jedynki w formie .txt. Ale pliki .bin to chyba coś innego?

> Jeśli w są w tekstowym, to np. tak (nie wiem czy można prościej, by musiała być odpowiednia 
> opcja PractRand i odpowiedni format danych tekstowych - może jest): 
> cat dane_tekstowe.txt | ./zamien_na_binarne | ./PractRand stdin [tu wpisz opcje PractRand] 
> Ale program który poprawnie zamieni Twoje dane tekstowe na dane binarne musisz napisać sobie sam. 

Tutaj piszą:

https://www.researchgate.net/publication/340214294_A_Practical_Approach_to_Testing_Random_Number_Generators_in_Computer_Algebra_Systems

że:

"For testing data from a file, the fol-lowing command can be used:

cat file.data | RNG_test stdin64

The data in the file must be binary; text files are not supported."

Że pliki tekstowe nie są akceptowane, więc, czy na pewno można to tak zrobić i to zadziała poprawnie? Same testy mi się wykonały, ale mam dużo FAILI:

rng=RNG_stdin, seed=0x8117bdda
length= 256 megabytes (2^28 bytes), time= 2.9 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-2,T)                  R=+27538479 p = 0           FAIL !!!!!!!!
  BCFN(2+1,13-2,T)                  R=+13016562 p = 0           FAIL !!!!!!!!
  BCFN(2+2,13-3,T)                  R=+8037376 p = 0           FAIL !!!!!!!!
  BCFN(2+3,13-3,T)                  R=+3903883 p = 0           FAIL !!!!!!!!
  BCFN(2+4,13-3,T)                  R=+1911999 p = 0           FAIL !!!!!!!!
  BCFN(2+5,13-4,T)                  R=+1199616 p = 0           FAIL !!!!!!!!
  BCFN(2+6,13-5,T)                  R=+746903 p = 0           FAIL !!!!!!!!
  BCFN(2+7,13-5,T)                  R=+370686 p = 0           FAIL !!!!!!!!
  BCFN(2+8,13-6,T)                  R=+228593 p = 0           FAIL !!!!!!!!
  BCFN(2+9,13-6,T)                  R=+113862 p = 0           FAIL !!!!!!!!
  BCFN(2+10,13-7,T)                 R=+69095  p = 0           FAIL !!!!!!!!
  BCFN(2+11,13-8,T)                 R=+40957  p = 0           FAIL !!!!!!!!
  BCFN(2+12,13-8,T)                 R=+20441  p =  1e-5188    FAIL !!!!!!!!
  BCFN(2+13,13-9,T)                 R=+11734  p =  8e-2638    FAIL !!!!!!!!
  BCFN(2+14,13-9,T)                 R= +5853  p =  3e-1316    FAIL !!!!!!!!
  DC6-9x1Bytes-1                    R=+13379089 p = 0           FAIL !!!!!!!!
  Gap-16:A                          R=+5676902 p = 0           FAIL !!!!!!!!
  Gap-16:B                          R=+25156958 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(0,14-0)              R=+9523586 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(4,14-1)              R=+11217844 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:all                   R=+16607352 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:cross                 R=+56967921 p = 0           FAIL !!!!!!!!
  BRank(12):128(4)                  R= +4568  p~=  2e-2430    FAIL !!!!!!!!
  BRank(12):256(4)                  R= +9390  p~=  6e-4995    FAIL !!!!!!!!
  BRank(12):384(1)                  R= +7106  p~=  3e-2140    FAIL !!!!!!!!
  BRank(12):512(2)                  R=+13459  p~=  1e-4052    FAIL !!!!!!!!
  BRank(12):768(1)                  R=+14339  p~=  1e-4317    FAIL !!!!!!!!
  BRank(12):1K(2)                   R=+27098  p~=  2e-8158    FAIL !!!!!!!!
  BRank(12):1536(1)                 R=+28805  p~=  2e-8672    FAIL !!!!!!!!
  BRank(12):2K(1)                   R=+38450  p~= 0           FAIL !!!!!!!!
  [Low1/8]BCFN(2+0,13-4,T)          R= +4290  p =  2e-1874    FAIL !!!!!!!!
  [Low1/8]BCFN(2+1,13-4,T)          R= +4280  p =  4e-1870    FAIL !!!!!!!!
  [Low1/8]BCFN(2+2,13-5,T)          R= +5376  p =  1e-2104    FAIL !!!!!!!!
  [Low1/8]BCFN(2+3,13-5,T)          R= +5322  p =  1e-2083    FAIL !!!!!!!!
  [Low1/8]BCFN(2+4,13-5,T)          R= +5216  p =  4e-2042    FAIL !!!!!!!!
  [Low1/8]BCFN(2+5,13-6,T)          R= +6417  p =  4e-2198    FAIL !!!!!!!!
  [Low1/8]BCFN(2+6,13-6,T)          R= +6363  p =  1e-2179    FAIL !!!!!!!!
  [Low1/8]BCFN(2+7,13-7,T)          R= +7512  p =  4e-2260    FAIL !!!!!!!!
  [Low1/8]BCFN(2+8,13-8,T)          R= +8494  p =  1e-2156    FAIL !!!!!!!!
  [Low1/8]BCFN(2+9,13-8,T)          R= +7611  p =  1e-1932    FAIL !!!!!!!!
  [Low1/8]BCFN(2+10,13-9,T)         R= +7064  p =  2e-1588    FAIL !!!!!!!!
  [Low1/8]BCFN(2+11,13-9,T)         R= +4936  p =  3e-1110    FAIL !!!!!!!!
  [Low1/8]DC6-9x1Bytes-1            R=+391.8  p =  4.9e-263   FAIL !!!!!!
  [Low1/8]FPF-14+6/16:(0,14-0)      R= +56.6  p =  1.0e-51    FAIL !!!!
  [Low1/8]FPF-14+6/16:(1,14-1)      R= +39.1  p =  1.9e-34    FAIL !!!
  [Low1/8]FPF-14+6/16:(2,14-2)      R= +24.1  p =  7.6e-21    FAIL !
  [Low1/8]FPF-14+6/16:(3,14-2)      R= +11.6  p =  6.6e-10  very suspicious
  [Low1/8]FPF-14+6/16:all           R= +80.5  p =  4.7e-75    FAIL !!!!
  [Low1/8]FPF-14+6/16:all2          R= +1234  p =  8.7e-437   FAIL !!!!!!!
  [Low1/8]FPF-14+6/16:cross         R=+347.9  p =  4.3e-274   FAIL !!!!!!
  [Low4/32]BCFN(2+0,13-4,T)         R=+5636982 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+1,13-4,T)         R=+2664412 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+2,13-5,T)         R=+1609820 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+3,13-5,T)         R=+781907 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+4,13-5,T)         R=+382945 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+5,13-6,T)         R=+233930 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+6,13-6,T)         R=+115740 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+7,13-7,T)         R=+69900  p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+8,13-8,T)         R=+41294  p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+9,13-8,T)         R=+20560  p =  6e-5219    FAIL !!!!!!!!
  [Low4/32]BCFN(2+10,13-9,T)        R=+11783  p =  1e-2648    FAIL !!!!!!!!
  [Low4/32]BCFN(2+11,13-9,T)        R= +5870  p =  4e-1320    FAIL !!!!!!!!
  [Low4/32]DC6-9x1Bytes-1           R=+2399367 p = 0           FAIL !!!!!!!!
  [Low4/32]Gap-16:A                 R=+756848 p = 0           FAIL !!!!!!!!
  [Low4/32]Gap-16:B                 R=+4597397 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(0,14-0)     R=+1007012 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(4,14-3)     R=+1156867 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(8,14-6)     R=+1083851 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(12,14-9)    R=+1027154 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:all          R=+1913749 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:all2         R=+1775316442517 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:cross        R=+10872050 p = 0           FAIL !!!!!!!!
  [Low4/32]BRank(12):128(4)         R= +3922  p~=  8e-2087    FAIL !!!!!!!!
  [Low4/32]BRank(12):256(2)         R= +5696  p~=  1e-1715    FAIL !!!!!!!!
  [Low4/32]BRank(12):384(1)         R= +6094  p~=  1e-1835    FAIL !!!!!!!!
  [Low4/32]BRank(12):512(2)         R=+11541  p~=  2e-3475    FAIL !!!!!!!!
  [Low4/32]BRank(12):768(1)         R=+12294  p~=  6e-3702    FAIL !!!!!!!!
  [Low4/32]BRank(12):1K(1)          R=+16427  p~=  3e-4946    FAIL !!!!!!!!
  [Low1/32]BCFN(2+0,13-5,T)         R= +1333  p =  5.0e-522   FAIL !!!!!!!
  [Low1/32]BCFN(2+1,13-5,T)         R= +1309  p =  1.3e-512   FAIL !!!!!!!
  [Low1/32]BCFN(2+2,13-6,T)         R= +1678  p =  4.5e-575   FAIL !!!!!!!
  [Low1/32]BCFN(2+3,13-6,T)         R= +1603  p =  1.6e-549   FAIL !!!!!!!
  [Low1/32]BCFN(2+4,13-6,T)         R= +1599  p =  6.2e-548   FAIL !!!!!!!
  [Low1/32]BCFN(2+5,13-7,T)         R= +1945  p =  1.3e-585   FAIL !!!!!!!
  [Low1/32]BCFN(2+6,13-8,T)         R= +2317  p =  6.9e-589   FAIL !!!!!!!
  [Low1/32]BCFN(2+7,13-8,T)         R= +2195  p =  5.7e-558   FAIL !!!!!!!
  [Low1/32]BCFN(2+8,13-9,T)         R= +2337  p =  2.7e-526   FAIL !!!!!!!
  [Low1/32]BCFN(2+9,13-9,T)         R= +2193  p =  6.4e-494   FAIL !!!!!!!
  [Low1/32]DC6-9x1Bytes-1           R=+126.7  p =  8.2e-67    FAIL !!!!
  [Low1/32]FPF-14+6/16:(0,14-2)     R= +22.0  p =  4.9e-19    FAIL !
  [Low1/32]FPF-14+6/16:(1,14-2)     R= +12.1  p =  2.1e-10   VERY SUSPICIOUS
  [Low1/32]FPF-14+6/16:(2,14-3)     R=  +9.0  p =  1.1e-7   suspicious
  [Low1/32]FPF-14+6/16:(3,14-4)     R=  +6.8  p =  1.8e-5   unusual
  [Low1/32]FPF-14+6/16:all          R= +29.9  p =  1.0e-26    FAIL !!
  [Low1/32]FPF-14+6/16:all2         R=+151.1  p =  3.4e-53    FAIL !!!!
  [Low1/32]FPF-14+6/16:cross        R= +95.9  p =  4.0e-78    FAIL !!!!
  ...and 36 test result(s) without anomalies

Co więcej w ten sposób PractRand przyjął też plik z wypisanymi liczbami 32-bitowymi jedna pod drugą w formacie dziesiętnym i też pokazał jakieś FAILE. Pytanie co program testuje, skoro plik był w nieodpowiednim formacie. Mam podejrzenia, że nie robi testów w sposób poprawny.
Re: Jak zrobić test za pomocą PractRand?
#217483
Author: osobli...
Date: Fri, 20 Aug 2021 16:57
1 lines
1788 bytes
Zapisałem plik za pomocą Pythona w formacie .data. Wygenerowałem strumień zer i jedynek do pliku. Plik ma 45 GB. I wciąż mam tę samą liczbę FAILI. Pytanie, czy danych nie jest za mało? Spróbuję wygenerować ich ponad 200 GB i zobaczę, czy to coś zmieni.
Re: Jak zrobić test za pomocą PractRand?
#217484
Author: M.M.
Date: Fri, 20 Aug 2021 17:26
183 lines
13113 bytes
On Friday, August 20, 2021 at 6:14:53 PM UTC+2, osobli...@gmail.com wrote:
> > Odnośnie C++ właśnie wkleiłem kluczową linię kodu: 
> > fwrite( buf, 1, sizeof(buf), stdout ); 
> > Lina ta wywala binarnie bufor na standardowe wyjście, wcześniej trzeba go zapełnić binarnymi danymi. W pliku do którego 
> > dałem link jest pełny przykład. 
> > 
> > Odnośnie Practrand ta linia jest kluczowa: 
> > { time ./$prog | ./../../PractRand/RNG_test stdin -singlethreaded -tlmax 360000s > $test; } 2> $time 
> > Przekierowuje ona standardowe wyjście programu do programu PractRand, reszta to opcje, pomiar czasu, przekierowanie wyników. 
> > 
> > W skrócie, jeśli PractRand jest w tym samym katalogu co program, uruchamia się to tak: 
> > ./Program | ./PractRand stdin [tu wpisz opcje PractRand]


> Wydaje mi się, że prędzej, niż ogarnę C++ zrobię odpowiedni plik. 
Można ,ale dobre testowanie wymaga dużo danych. Osobiście testowałem generatory minimum 
godzinę, maksimum (o ile pamiętam) dwa tygodnie na jednym wątku. Przez ten czas, szczególnie
przez dwa tygodnie, generator jest w stanie wygenerować sporo liczb i program testowy sporo skonsumować.
Liczby z dwóch tygodni nie wiem czy zmieszczą się na dysku.

> Przepisanie kodu z Pythona do C++ musiałbym raczej komuś zlecić. 
Co tam konkretnie jest do napisania? Może coś podobnego jest to gotowe pod linkami które podałem?

> Także chyba z pisaniem programu w C++ dam sobie spokój (tym bardziej, że mój program wykonuje operacje na liczbach 
> 128-bitowych, a C++ takich nie obsługuje, zaś zainstalowanie odpowiedniej biblioteki do obsługi tak dużych liczb, to już jest 
> dla mnie zadanie na długie tygodnie, może miesiące, bez gwarancji sukcesu - gdy próbowałem zrobić to lata temu nie udało się). 

Niektóre kompilatory obsługują typ 128bitowy tak samo jak typ 64bitowy. Po zainstalowaniu dobrej biblioteki w C++ używa się
typu N-bitowego tak samo jak np. 64bitowego. 

> Pytanie, czy będę w stanie wygenerować odpowiedni plik w odpowiednim czasie (bo pomimo, że generatory, które testuję są 
> jednymi z najszybszych na świecie, co do zasady są podobne do PCG generators, to Python nie dość, że bywa 50-100 razy 
> wolniejszy niż C++, to jeszcze do tego sam zapis do pliku trwa długo i jak szybki nie byłby generator - nie da się tego procesu
> przyspieszyć). Ile PractRand potrzebuje danych? 

Zapis całego dużego dysku to np. jedna doba, ale zależy jaki szybki/duży dysk, może być godzina, może być tydzień. Trudno
bez testów powiedzieć czy wolniejszy będzie zapis czy powolne generowanie najszybszym generatorem na świecie. PractRand
tym lepiej testuje im więcej danych otrzyma. Jeśli jakiś generator, w jakimś programie intensywnie pracuje przez długie tygodnie na
wielu wątkach, to testowanie generatora przez kilka dni  może mieć sens. Można też zapisać zarodki generatorów użyte w 
programie, aby potem wykonać testy dokładnie tych samych ciągów losowych liczby jakie były użyte.
 
> Dieharder przykładowo potrzebował 32-bitowe liczby wypisane jedna pod drugą w ilości blisko 50 GB (których 
> zapisanie do pliku i wygenerowanie trwało kilka godzin), 

To możesz zapisać teraz 50GB na dysk z dev/zero przy użyciu dd i mieć przybliżony narzut na obliczenia generatora.


> żeby generator nie oblewał testów (gdy danych było za mało plik był zawijany i do testów był brane w kółko te same liczby, do 
> powodowało oblewanie testów). A i tak zawijał niektóre próbki, tzw. " rewounds".

Temat jest trudniejszy, może generator na małych zapętlonych danych przechodzić test, na na długich oblewać. 
Chyba najlepiej odtworzyć te same dane losowe co były użyte w programie, aby mieć pewność że program 
pracował na losowych danych które przechodzą testy statystyczne.

> > Jeśli dane są w pliku binarnym to tak: 
> > cat dane_binarne.bin | ./PractRand stdin [tu wpisz opcje PractRand]
> Jak utworzyć plik .bin? Mam 50GB danych binarnych, to jest zera i jedynki w formie .txt. Ale pliki .bin to chyba coś innego?
> > Jeśli w są w tekstowym, to np. tak (nie wiem czy można prościej, by musiała być odpowiednia 
> > opcja PractRand i odpowiedni format danych tekstowych - może jest): 
> > cat dane_tekstowe.txt | ./zamien_na_binarne | ./PractRand stdin [tu wpisz opcje PractRand] 
> > Ale program który poprawnie zamieni Twoje dane tekstowe na dane binarne musisz napisać sobie sam.
> Tutaj piszą: 
> 
> https://www.researchgate.net/publication/340214294_A_Practical_Approach_to_Testing_Random_Number_Generators_in_Computer_Algebra_Systems 
> 
> że:
> "For testing data from a file, the fol-lowing command can be used: 
> 
> cat file.data | RNG_test stdin64 
> 
> The data in the file must be binary; text files are not supported."
> Że pliki tekstowe nie są akceptowane, więc, czy na pewno można to tak zrobić i to zadziała poprawnie? Same testy mi się wykonały, ale mam dużo FAILI: 

Zadziała, ale jeśli tester nie wspomaga plików tekstowych, to trzeba samemu napisać program który zamieni dane tekstowe na binarne.
Potem dam przykładowy kod w C++, może dziś wieczorem, to kilka linijek.
 
> rng=RNG_stdin, seed=0x8117bdda 
> length= 256 megabytes (2^28 bytes), time= 2.9 seconds
> Test Name Raw Processed Evaluation
> BCFN(2+0,13-2,T) R=+27538479 p = 0 FAIL !!!!!!!! 
> BCFN(2+1,13-2,T) R=+13016562 p = 0 FAIL !!!!!!!! 
> BCFN(2+2,13-3,T) R=+8037376 p = 0 FAIL !!!!!!!! 
> BCFN(2+3,13-3,T) R=+3903883 p = 0 FAIL !!!!!!!! 
> BCFN(2+4,13-3,T) R=+1911999 p = 0 FAIL !!!!!!!! 
> BCFN(2+5,13-4,T) R=+1199616 p = 0 FAIL !!!!!!!! 
> BCFN(2+6,13-5,T) R=+746903 p = 0 FAIL !!!!!!!! 
> BCFN(2+7,13-5,T) R=+370686 p = 0 FAIL !!!!!!!! 
> BCFN(2+8,13-6,T) R=+228593 p = 0 FAIL !!!!!!!! 
> BCFN(2+9,13-6,T) R=+113862 p = 0 FAIL !!!!!!!! 
> BCFN(2+10,13-7,T) R=+69095 p = 0 FAIL !!!!!!!! 
> BCFN(2+11,13-8,T) R=+40957 p = 0 FAIL !!!!!!!! 
> BCFN(2+12,13-8,T) R=+20441 p = 1e-5188 FAIL !!!!!!!! 
> BCFN(2+13,13-9,T) R=+11734 p = 8e-2638 FAIL !!!!!!!! 
> BCFN(2+14,13-9,T) R= +5853 p = 3e-1316 FAIL !!!!!!!! 
> DC6-9x1Bytes-1 R=+13379089 p = 0 FAIL !!!!!!!! 
> Gap-16:A R=+5676902 p = 0 FAIL !!!!!!!! 
> Gap-16:B R=+25156958 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:(0,14-0) R=+9523586 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:(4,14-1) R=+11217844 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:all R=+16607352 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:cross R=+56967921 p = 0 FAIL !!!!!!!! 
> BRank(12):128(4) R= +4568 p~= 2e-2430 FAIL !!!!!!!! 
> BRank(12):256(4) R= +9390 p~= 6e-4995 FAIL !!!!!!!! 
> BRank(12):384(1) R= +7106 p~= 3e-2140 FAIL !!!!!!!! 
> BRank(12):512(2) R=+13459 p~= 1e-4052 FAIL !!!!!!!! 
> BRank(12):768(1) R=+14339 p~= 1e-4317 FAIL !!!!!!!! 
> BRank(12):1K(2) R=+27098 p~= 2e-8158 FAIL !!!!!!!! 
> BRank(12):1536(1) R=+28805 p~= 2e-8672 FAIL !!!!!!!! 
> BRank(12):2K(1) R=+38450 p~= 0 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+0,13-4,T) R= +4290 p = 2e-1874 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+1,13-4,T) R= +4280 p = 4e-1870 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+2,13-5,T) R= +5376 p = 1e-2104 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+3,13-5,T) R= +5322 p = 1e-2083 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+4,13-5,T) R= +5216 p = 4e-2042 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+5,13-6,T) R= +6417 p = 4e-2198 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+6,13-6,T) R= +6363 p = 1e-2179 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+7,13-7,T) R= +7512 p = 4e-2260 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+8,13-8,T) R= +8494 p = 1e-2156 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+9,13-8,T) R= +7611 p = 1e-1932 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+10,13-9,T) R= +7064 p = 2e-1588 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+11,13-9,T) R= +4936 p = 3e-1110 FAIL !!!!!!!! 
> [Low1/8]DC6-9x1Bytes-1 R=+391.8 p = 4.9e-263 FAIL !!!!!! 
> [Low1/8]FPF-14+6/16:(0,14-0) R= +56.6 p = 1.0e-51 FAIL !!!! 
> [Low1/8]FPF-14+6/16:(1,14-1) R= +39.1 p = 1.9e-34 FAIL !!! 
> [Low1/8]FPF-14+6/16:(2,14-2) R= +24.1 p = 7.6e-21 FAIL ! 
> [Low1/8]FPF-14+6/16:(3,14-2) R= +11.6 p = 6.6e-10 very suspicious 
> [Low1/8]FPF-14+6/16:all R= +80.5 p = 4.7e-75 FAIL !!!! 
> [Low1/8]FPF-14+6/16:all2 R= +1234 p = 8.7e-437 FAIL !!!!!!! 
> [Low1/8]FPF-14+6/16:cross R=+347.9 p = 4.3e-274 FAIL !!!!!! 
> [Low4/32]BCFN(2+0,13-4,T) R=+5636982 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+1,13-4,T) R=+2664412 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+2,13-5,T) R=+1609820 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+3,13-5,T) R=+781907 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+4,13-5,T) R=+382945 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+5,13-6,T) R=+233930 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+6,13-6,T) R=+115740 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+7,13-7,T) R=+69900 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+8,13-8,T) R=+41294 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+9,13-8,T) R=+20560 p = 6e-5219 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+10,13-9,T) R=+11783 p = 1e-2648 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+11,13-9,T) R= +5870 p = 4e-1320 FAIL !!!!!!!! 
> [Low4/32]DC6-9x1Bytes-1 R=+2399367 p = 0 FAIL !!!!!!!! 
> [Low4/32]Gap-16:A R=+756848 p = 0 FAIL !!!!!!!! 
> [Low4/32]Gap-16:B R=+4597397 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(0,14-0) R=+1007012 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(4,14-3) R=+1156867 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(8,14-6) R=+1083851 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(12,14-9) R=+1027154 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:all R=+1913749 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:all2 R=+1775316442517 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:cross R=+10872050 p = 0 FAIL !!!!!!!! 
> [Low4/32]BRank(12):128(4) R= +3922 p~= 8e-2087 FAIL !!!!!!!! 
> [Low4/32]BRank(12):256(2) R= +5696 p~= 1e-1715 FAIL !!!!!!!! 
> [Low4/32]BRank(12):384(1) R= +6094 p~= 1e-1835 FAIL !!!!!!!! 
> [Low4/32]BRank(12):512(2) R=+11541 p~= 2e-3475 FAIL !!!!!!!! 
> [Low4/32]BRank(12):768(1) R=+12294 p~= 6e-3702 FAIL !!!!!!!! 
> [Low4/32]BRank(12):1K(1) R=+16427 p~= 3e-4946 FAIL !!!!!!!! 
> [Low1/32]BCFN(2+0,13-5,T) R= +1333 p = 5.0e-522 FAIL !!!!!!! 
> [Low1/32]BCFN(2+1,13-5,T) R= +1309 p = 1.3e-512 FAIL !!!!!!! 
> [Low1/32]BCFN(2+2,13-6,T) R= +1678 p = 4.5e-575 FAIL !!!!!!! 
> [Low1/32]BCFN(2+3,13-6,T) R= +1603 p = 1.6e-549 FAIL !!!!!!! 
> [Low1/32]BCFN(2+4,13-6,T) R= +1599 p = 6.2e-548 FAIL !!!!!!! 
> [Low1/32]BCFN(2+5,13-7,T) R= +1945 p = 1.3e-585 FAIL !!!!!!! 
> [Low1/32]BCFN(2+6,13-8,T) R= +2317 p = 6.9e-589 FAIL !!!!!!! 
> [Low1/32]BCFN(2+7,13-8,T) R= +2195 p = 5.7e-558 FAIL !!!!!!! 
> [Low1/32]BCFN(2+8,13-9,T) R= +2337 p = 2.7e-526 FAIL !!!!!!! 
> [Low1/32]BCFN(2+9,13-9,T) R= +2193 p = 6.4e-494 FAIL !!!!!!! 
> [Low1/32]DC6-9x1Bytes-1 R=+126.7 p = 8.2e-67 FAIL !!!! 
> [Low1/32]FPF-14+6/16:(0,14-2) R= +22.0 p = 4.9e-19 FAIL ! 
> [Low1/32]FPF-14+6/16:(1,14-2) R= +12.1 p = 2.1e-10 VERY SUSPICIOUS 
> [Low1/32]FPF-14+6/16:(2,14-3) R= +9.0 p = 1.1e-7 suspicious 
> [Low1/32]FPF-14+6/16:(3,14-4) R= +6.8 p = 1.8e-5 unusual 
> [Low1/32]FPF-14+6/16:all R= +29.9 p = 1.0e-26 FAIL !! 
> [Low1/32]FPF-14+6/16:all2 R=+151.1 p = 3.4e-53 FAIL !!!! 
> [Low1/32]FPF-14+6/16:cross R= +95.9 p = 4.0e-78 FAIL !!!! 
> ...and 36 test result(s) without anomalies 
> 
> Co więcej w ten sposób PractRand przyjął też plik z wypisanymi liczbami 32-bitowymi jedna pod drugą w formacie dziesiętnym i też pokazał jakieś FAILE. Pytanie co program testuje, skoro plik był w nieodpowiednim formacie. Mam podejrzenia, że nie robi testów w sposób poprawny.

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.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217485
Author: osobli...
Date: Fri, 20 Aug 2021 18:45
62 lines
6009 bytes
> Jeśli dane są w pliku binarnym to tak: 
> cat dane_binarne.bin | ./PractRand stdin [tu wpisz opcje PractRand] 

Jakie są te opcje PractRand? Ja uruchamiam to w ten sposób:

cat plik.data | ./RNG_test stdin

Niestety zwiększenie rozmiaru pliku do 230 GB nie pomogło, a więcej nie zmieści mi się na dysku. Wciąż dziwią mnie te oblane testy, podczas, gdy wszystkie testy Dieharder ten generator zdawał. Albo PractRand jest o tyle bardziej wymagający, albo nadal coś jest nie tak.

> > Wydaje mi się, że prędzej, niż ogarnę C++ zrobię odpowiedni plik.
> Można ,ale dobre testowanie wymaga dużo danych. Osobiście testowałem generatory minimum 
> godzinę, maksimum (o ile pamiętam) dwa tygodnie na jednym wątku. Przez ten czas, szczególnie 
> przez dwa tygodnie, generator jest w stanie wygenerować sporo liczb i program testowy sporo skonsumować. 
> Liczby z dwóch tygodni nie wiem czy zmieszczą się na dysku.

Na pewno się nie zmieszczą. Już osiągnąłem limit. Z jakichś powodów zresztą bardzo szybko udało mi się to wygenerować i zapisać do pliku (godzina z hakiem), tak jakby liczby w formacie binarnym zapisywały się szybciej. 50 GB liczb 32-bitowych w formacie dziesiętnym zapisywało mi się kilka godzin.

Ile GB w takim przetestowałeś, skoro robiłeś testy nawet 2 tygodnie?

> > Przepisanie kodu z Pythona do C++ musiałbym raczej komuś zlecić.
> Co tam konkretnie jest do napisania? Może coś podobnego jest to gotowe pod linkami które podałem?

Przykładowy program:

https://pastebin.com/K164URZQ

Liczby 128-bitowe są tam ładowanie po prostu do listy allstream, ale oczywiście można to zaaranżować inaczej. 

> > Pytanie, czy będę w stanie wygenerować odpowiedni plik w odpowiednim czasie (bo pomimo, że generatory, które testuję są 
> > jednymi z najszybszych na świecie, co do zasady są podobne do PCG generators, to Python nie dość, że bywa 50-100 razy 
> > wolniejszy niż C++, to jeszcze do tego sam zapis do pliku trwa długo i jak szybki nie byłby generator - nie da się tego procesu 
> > przyspieszyć). Ile PractRand potrzebuje danych?
> Zapis całego dużego dysku to np. jedna doba, ale zależy jaki szybki/duży dysk, może być godzina, może być tydzień. Trudno 
> bez testów powiedzieć czy wolniejszy będzie zapis czy powolne generowanie najszybszym generatorem na świecie. PractRand 
> tym lepiej testuje im więcej danych otrzyma. 

Ja zapisałem cały dysk w godzinę z hakiem.

> > żeby generator nie oblewał testów (gdy danych było za mało plik był zawijany i do testów był brane w kółko te same liczby, do 
> > powodowało oblewanie testów). A i tak zawijał niektóre próbki, tzw. " rewounds".
> Temat jest trudniejszy, może generator na małych zapętlonych danych przechodzić test, na na długich oblewać. 

W każdym razie wszystkie testy przy odpowiedniej ilości danych zdawał. Wystarczyło 50 GB danych, zapisanych w formacie dziesiętnym jako liczby 32-bitowe.

> Chyba najlepiej odtworzyć te same dane losowe co były użyte w programie, aby mieć pewność że program 
> pracował na losowych danych które przechodzą testy statystyczne.

Używam tych samych danych. A mimo to w PractRand pełno testów jest  niezdanych.

> Zadziała, ale jeśli tester nie wspomaga plików tekstowych, to trzeba samemu napisać program który zamieni dane tekstowe na binarne. 
> Potem dam przykładowy kod w C++, może dziś wieczorem, to kilka linijek.

Wygenerowałem plik .data. Zapisałem tam liczby w formacie binarnym. Wszystko wskazuje na to, że to powinno działać. Może po prostu generator nie zdaje testów. Z drugiej jednak strony, jeśli Ty piszesz, że testowałeś generator nawet kilka dni, to jest nic w porównaniu z danymi, które ja dostarczyłem do testów, wygenerowanymi zaledwie w godzinę. Może po prostu jest ich za mało. Ale, czy 230 GB to za mało?

> 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:

"0101010101010001011110101010101011101001011111010110111110...01010101010101010010101010101001010101010100101010101011111"

Po prostu pseudolosowy ciąg zer i jedynek, nic więcej.
Re: Jak zrobić test za pomocą PractRand?
#217486
Author: M.M.
Date: Fri, 20 Aug 2021 20:32
65 lines
6647 bytes
On Friday, August 20, 2021 at 8:45:23 PM UTC+2, osobli...@gmail.com wrote:
> > Jeśli dane są w pliku binarnym to tak: 
> > cat dane_binarne.bin | ./PractRand stdin [tu wpisz opcje PractRand]
> Jakie są te opcje PractRand? Ja uruchamiam to w ten sposób: 
> 
> cat plik.data | ./RNG_test stdin 
> 
> Niestety zwiększenie rozmiaru pliku do 230 GB nie pomogło, a więcej nie zmieści mi się na dysku. Wciąż dziwią mnie te oblane testy, podczas, gdy wszystkie testy Dieharder ten generator zdawał. Albo PractRand jest o tyle bardziej wymagający, albo nadal coś jest nie tak.
> > > Wydaje mi się, że prędzej, niż ogarnę C++ zrobię odpowiedni plik. 
> > Można ,ale dobre testowanie wymaga dużo danych. Osobiście testowałem generatory minimum 
> > godzinę, maksimum (o ile pamiętam) dwa tygodnie na jednym wątku. Przez ten czas, szczególnie 
> > przez dwa tygodnie, generator jest w stanie wygenerować sporo liczb i program testowy sporo skonsumować. 
> > Liczby z dwóch tygodni nie wiem czy zmieszczą się na dysku.
> Na pewno się nie zmieszczą. Już osiągnąłem limit. Z jakichś powodów zresztą bardzo szybko udało mi się to wygenerować i zapisać do pliku (godzina z hakiem), tak jakby liczby w formacie binarnym zapisywały się szybciej. 50 GB liczb 32-bitowych w formacie dziesiętnym zapisywało mi się kilka godzin. 
> 
> Ile GB w takim przetestowałeś, skoro robiłeś testy nawet 2 tygodnie?
> > > Przepisanie kodu z Pythona do C++ musiałbym raczej komuś zlecić. 
> > Co tam konkretnie jest do napisania? Może coś podobnego jest to gotowe pod linkami które podałem?
> Przykładowy program: 
> 
> https://pastebin.com/K164URZQ 
> 
> Liczby 128-bitowe są tam ładowanie po prostu do listy allstream, ale oczywiście można to zaaranżować inaczej.
> > > Pytanie, czy będę w stanie wygenerować odpowiedni plik w odpowiednim czasie (bo pomimo, że generatory, które testuję są 
> > > jednymi z najszybszych na świecie, co do zasady są podobne do PCG generators, to Python nie dość, że bywa 50-100 razy 
> > > wolniejszy niż C++, to jeszcze do tego sam zapis do pliku trwa długo i jak szybki nie byłby generator - nie da się tego procesu 
> > > przyspieszyć). Ile PractRand potrzebuje danych? 
> > Zapis całego dużego dysku to np. jedna doba, ale zależy jaki szybki/duży dysk, może być godzina, może być tydzień. Trudno 
> > bez testów powiedzieć czy wolniejszy będzie zapis czy powolne generowanie najszybszym generatorem na świecie. PractRand 
> > tym lepiej testuje im więcej danych otrzyma.
> Ja zapisałem cały dysk w godzinę z hakiem.
> > > żeby generator nie oblewał testów (gdy danych było za mało plik był zawijany i do testów był brane w kółko te same liczby, do 
> > > powodowało oblewanie testów). A i tak zawijał niektóre próbki, tzw. " rewounds". 
> > Temat jest trudniejszy, może generator na małych zapętlonych danych przechodzić test, na na długich oblewać.
> W każdym razie wszystkie testy przy odpowiedniej ilości danych zdawał. Wystarczyło 50 GB danych, zapisanych w formacie dziesiętnym jako liczby 32-bitowe.
> > Chyba najlepiej odtworzyć te same dane losowe co były użyte w programie, aby mieć pewność że program 
> > pracował na losowych danych które przechodzą testy statystyczne.
> Używam tych samych danych. A mimo to w PractRand pełno testów jest niezdanych.
> > Zadziała, ale jeśli tester nie wspomaga plików tekstowych, to trzeba samemu napisać program który zamieni dane tekstowe na binarne. 
> > Potem dam przykładowy kod w C++, może dziś wieczorem, to kilka linijek.
> Wygenerowałem plik .data. Zapisałem tam liczby w formacie binarnym. Wszystko wskazuje na to, że to powinno działać. Może po prostu generator nie zdaje testów. Z drugiej jednak strony, jeśli Ty piszesz, że testowałeś generator nawet kilka dni, to jest nic w porównaniu z danymi, które ja dostarczyłem do testów, wygenerowanymi zaledwie w godzinę. Może po prostu jest ich za mało. Ale, czy 230 GB to za mało?
> > 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: 
> 
> "0101010101010001011110101010101011101001011111010110111110...01010101010101010010101010101001010101010100101010101011111" 
> 
> Po prostu pseudolosowy ciąg zer i jedynek, nic więcej.

Ok.

Pobierz ten plik źródłowy i skompiluj konwerter.
https://github.com/mmarszik/01ToBin/blob/main/main.cpp

Potem uruchom tak:

TwójGeneratorZerIJedynek | ./01ToBin | ./PractRand stdin

Albo gorzej tak:

cat PlikZerIJedynek | ./01ToBin | ./PractRand stdin

Nie testowałem, jak nie zadziała, to będzie trzeba sprawdzić czy konwerter nie ma jakiś błędów

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217487
Author: osobli...
Date: Fri, 20 Aug 2021 21:56
1 lines
1847 bytes
Jeśli zrobiłem wszystko dobrze, to mam debug error - "abort() has been called". Próbowałem opcji z plikiem .data.
Re: Jak zrobić test za pomocą PractRand?
#217488
Author: M.M.
Date: Fri, 20 Aug 2021 22:11
14 lines
2286 bytes
On Friday, August 20, 2021 at 11:56:42 PM UTC+2, osobli...@gmail.com wrote:
> Jeśli zrobiłem wszystko dobrze, to mam debug error - "abort() has been called". Próbowałem opcji z plikiem .data.

Nie ma w pliku jakiś innych znaków niż 0 i 1? Nie ma np. znaku końca linii?

U siebie zmniejszyłem bufor do jednego bajtu:
#define SIZE_OUT (1<<0)

I uruchomiłem taką komendę:
echo '01010101111111110000000010101001' | ./01ToBin

Nic się nie wywaliło, wyrzuciło na ekran krzaczki - zgodnie z oczekiwaniami.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217489
Author: osobli...
Date: Fri, 20 Aug 2021 22:20
1 lines
1985 bytes
W tej chwili poza tym komunikatem mam "-bash: ./PractRand: No such file or directory". Znaku końca linii do pliku nie wstawiałem, więc chyba nie powinno go tam być.
Re: Jak zrobić test za pomocą PractRand?
#217490
Author: osobli...
Date: Fri, 20 Aug 2021 22:27
19 lines
2793 bytes
Udało mi się to uruchomić komendą

cat plik.data | ./konwerter.exe | ./RNG_test stdin


rng=RNG_stdin, seed=0xe933a977
length= 32 megabytes (2^25 bytes), time= 3.1 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-4,T)                  R= +3177  p =  8e-1388    FAIL !!!!!!!!
  BCFN(2+1,13-4,T)                  R= +3148  p =  3e-1375    FAIL !!!!!!!!
...
  [Low1/32]FPF-14+6/16:(0,14-4)     R= +14.9  p =  4.0e-12   VERY SUSPICIOUS
  [Low1/32]FPF-14+6/16:(1,14-5)     R=  +8.1  p =  1.3e-6   mildly suspicious
  [Low1/32]FPF-14+6/16:all          R= +19.0  p =  8.5e-16    FAIL !
  [Low1/32]FPF-14+6/16:all2         R= +54.4  p =  1.8e-18    FAIL !
  [Low1/32]FPF-14+6/16:cross        R= +33.2  p =  6.6e-26    FAIL !!
  ...and 55 test result(s) without anomalies

Faili nadal jest dużo, komunikat systemowy "abort() has been called" nadal się pojawia, ale wykazuje więcej testów bez anomialii.
Re: Jak zrobić test za pomocą PractRand?
#217491
Author: M.M.
Date: Fri, 20 Aug 2021 22:49
34 lines
3330 bytes
On Saturday, August 21, 2021 at 12:27:11 AM UTC+2, osobli...@gmail.com wrote:
> Udało mi się to uruchomić komendą 
> 
> cat plik.data | ./konwerter.exe | ./RNG_test stdin 
> 
> 
> rng=RNG_stdin, seed=0xe933a977 
> length= 32 megabytes (2^25 bytes), time= 3.1 seconds
> Test Name Raw Processed Evaluation
> BCFN(2+0,13-4,T) R= +3177 p = 8e-1388 FAIL !!!!!!!! 
> BCFN(2+1,13-4,T) R= +3148 p = 3e-1375 FAIL !!!!!!!! 
> ... 
> [Low1/32]FPF-14+6/16:(0,14-4) R= +14.9 p = 4.0e-12 VERY SUSPICIOUS 
> [Low1/32]FPF-14+6/16:(1,14-5) R= +8.1 p = 1.3e-6 mildly suspicious 
> [Low1/32]FPF-14+6/16:all R= +19.0 p = 8.5e-16 FAIL ! 
> [Low1/32]FPF-14+6/16:all2 R= +54.4 p = 1.8e-18 FAIL ! 
> [Low1/32]FPF-14+6/16:cross R= +33.2 p = 6.6e-26 FAIL !! 
> ...and 55 test result(s) without anomalies 
> 
> Faili nadal jest dużo, komunikat systemowy "abort() has been called" nadal się pojawia, ale wykazuje więcej testów bez anomialii.

Może PractRand kończy działanie po wykryciu tylu faili i konwerter ma błąd zapisu, no bo nie ma procesu do którego by mógł pisać - więc robi abort.

Można zrobić test z prostszym generatorem, np.:

//Dla 128 bitów
return ( next = (prev * a + b) ) >> 96;

//Dla 64 bitów
return ( next = (prev * a + b) ) >> 32;

Jeśli a i b są dobrze dobrane, to PractRand musi pracować bardzo długo zanim wykryje anomalie.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217492
Author: osobli...
Date: Fri, 20 Aug 2021 23:55
1 lines
2150 bytes
Nie potrafię zmodyfikować mojego programu, żeby generował bit po bicie, więc na razie nie sprawdzę, czy to ostatecznie działa. Pewnie będę potrzebował na to kilku dni lub tygodni, bo ledwo umiem programować.
Re: Jak zrobić test za pomocą PractRand?
#217493
Author: M.M.
Date: Sat, 21 Aug 2021 09:40
7 lines
2472 bytes
On Saturday, August 21, 2021 at 1:55:24 AM UTC+2, osobli...@gmail.com wrote:
> Nie potrafię zmodyfikować mojego programu, żeby generował bit po bicie, więc na razie nie sprawdzę, czy to ostatecznie działa. Pewnie będę potrzebował na to kilku dni lub tygodni, bo ledwo umiem programować.

To jest proste, tamten kod generatora zastąp tymi kilkoma operacjami arytmetycznymi co podałem.
Ale może wieczorem zrobię i wrzucę taki minimalny generator, i test tym konwerterem.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217494
Author: M.M.
Date: Sat, 21 Aug 2021 11:27
57 lines
4052 bytes
On Saturday, August 21, 2021 at 1:55:24 AM UTC+2, osobli...@gmail.com wrote:
> Nie potrafię zmodyfikować mojego programu, żeby generował bit po bicie, więc na razie nie sprawdzę, czy to ostatecznie działa. Pewnie będę potrzebował na to kilku dni lub tygodni, bo ledwo umiem programować.

U mnie przez ponad 1000 sekund nie było problemu:

./SimpPRNG 1 | ../../01ToBin/release/01ToBin | ../../PractRand/RNG_test stdin
RNG_test using PractRand version 0.94
RNG = RNG_stdin, seed = unknown
test set = core, folding = standard(unknown format)

rng=RNG_stdin, seed=unknown
length= 64 megabytes (2^26 bytes), time= 2.4 seconds
  no anomalies in 179 test result(s)

rng=RNG_stdin, seed=unknown
length= 128 megabytes (2^27 bytes), time= 5.5 seconds
  no anomalies in 196 test result(s)

rng=RNG_stdin, seed=unknown
length= 256 megabytes (2^28 bytes), time= 11.0 seconds
  no anomalies in 213 test result(s)

rng=RNG_stdin, seed=unknown
length= 512 megabytes (2^29 bytes), time= 21.2 seconds
  no anomalies in 229 test result(s)

rng=RNG_stdin, seed=unknown
length= 1 gigabyte (2^30 bytes), time= 40.8 seconds
  no anomalies in 248 test result(s)

rng=RNG_stdin, seed=unknown
length= 2 gigabytes (2^31 bytes), time= 78.9 seconds
  no anomalies in 266 test result(s)

rng=RNG_stdin, seed=unknown
length= 4 gigabytes (2^32 bytes), time= 153 seconds
  no anomalies in 282 test result(s)

rng=RNG_stdin, seed=unknown
length= 8 gigabytes (2^33 bytes), time= 303 seconds
  no anomalies in 299 test result(s)

rng=RNG_stdin, seed=unknown
length= 16 gigabytes (2^34 bytes), time= 601 seconds
  no anomalies in 315 test result(s)

rng=RNG_stdin, seed=unknown
length= 32 gigabytes (2^35 bytes), time= 1186 seconds
  no anomalies in 328 test result(s)

^C

https://github.com/mmarszik/SimpPRNG/blob/main/main.cpp
https://github.com/mmarszik/01ToBin/blob/main/main.cpp


Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217495
Author: osobli...
Date: Sat, 21 Aug 2021 15:51
10 lines
2215 bytes
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.
Re: Jak zrobić test za pomocą PractRand?
#217496
Author: M.M.
Date: Sat, 21 Aug 2021 16:30
14 lines
2569 bytes
On Saturday, August 21, 2021 at 5:51:18 PM UTC+2, osobli...@gmail.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
Re: Jak zrobić test za pomocą PractRand?
#217497
Author: osobli...
Date: Sat, 21 Aug 2021 17:16
1 lines
2268 bytes
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?
Re: Jak zrobić test za pomocą PractRand?
#217498
Author: osobli...
Date: Sat, 21 Aug 2021 19:24
31 lines
3766 bytes
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:

10010000011111101001010010111110000111100110001101110000110101100001110110000100111010001001101001010101000001110001011010011010
11000010010001100011011101000100101100100110001010001101110111011010001010101110100010101010010011011111000111001101101001100
11100000001000000110110011000100101011000000101011111010111000111011010101011010100111000001100110011010111000110011110110101000
1110111110101001110100000000101101010111100010110011010010000110000001100100101000100101010111101010010011101010100110101010000
10100110001000001011011100000110100111000110111101010000010011001010010010100110000011000110010000110011101001100011001110101001
11000111101010101000111100100000101100100110111111001110101100100001111101011001100001010000000111000110111000101011001010010100
1011011101111101011000110101000010100011000111000010010011110101001110111100011001001101111010001010000000101111110001111011001

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.
Re: Jak zrobić test za pomocą PractRand?
#217499
Author: M.M.
Date: Sat, 21 Aug 2021 19:48
40 lines
4257 bytes
On Saturday, August 21, 2021 at 9:24:25 PM UTC+2, osobli...@gmail.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: 
> 
> 10010000011111101001010010111110000111100110001101110000110101100001110110000100111010001001101001010101000001110001011010011010 
> 11000010010001100011011101000100101100100110001010001101110111011010001010101110100010101010010011011111000111001101101001100 
> 11100000001000000110110011000100101011000000101011111010111000111011010101011010100111000001100110011010111000110011110110101000 
> 1110111110101001110100000000101101010111100010110011010010000110000001100100101000100101010111101010010011101010100110101010000 
> 10100110001000001011011100000110100111000110111101010000010011001010010010100110000011000110010000110011101001100011001110101001 
> 11000111101010101000111100100000101100100110111111001110101100100001111101011001100001010000000111000110111000101011001010010100 
> 1011011101111101011000110101000010100011000111000010010011110101001110111100011001001101111010001010000000101111110001111011001 
> 
> 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
Re: Jak zrobić test za pomocą PractRand?
#217500
Author: M.M.
Date: Sat, 21 Aug 2021 19:57
16 lines
3226 bytes
On Saturday, August 21, 2021 at 7:16:13 PM UTC+2, osobli...@gmail.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
Re: Jak zrobić test za pomocą PractRand?
#217501
Author: osobli...
Date: Sat, 21 Aug 2021 20:55
33 lines
3863 bytes
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, osobli...@gmail.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:

10010000011111101001010010111110000111100110001101110000110101100001110110000100111010001001101001010101000001110001011010011010
11000010010001100011011101000100101100100110001010001101110111011010001010101110100010101010010011011111000111001101101001100
11100000001000000110110011000100101011000000101011111010111000111011010101011010100111000001100110011010111000110011110110101000
1110111110101001110100000000101101010111100010110011010010000110000001100100101000100101010111101010010011101010100110101010000

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.
Re: Jak zrobić test za pomocą PractRand?
#217502
Author: osobli...
Date: Sat, 21 Aug 2021 20:58
8 lines
2852 bytes
PS Gdy program wypisuje:

10010000011111101001010010111110000111100110001101110000110101100001110110000100111010001001101001010101000001110001011010011010
11000010010001100011011101000100101100100110001010001101110111011010001010101110100010101010010011011111000111001101101001100
11100000001000000110110011000100101011000000101011111010111000111011010101011010100111000001100110011010111000110011110110101000
1110111110101001110100000000101101010111100010110011010010000110000001100100101000100101010111101010010011101010100110101010000

tak naprawdę nie ma nigdzie żadnego znaku nowej linii, czy wiersza.
Re: Jak zrobić test za pomocą PractRand?
#217503
Author: M.M.
Date: Sat, 21 Aug 2021 21:22
11 lines
3190 bytes
On Saturday, August 21, 2021 at 10:58:46 PM UTC+2, osobli...@gmail.com wrote:
> PS Gdy program wypisuje: 
> 
> 10010000011111101001010010111110000111100110001101110000110101100001110110000100111010001001101001010101000001110001011010011010 
> 11000010010001100011011101000100101100100110001010001101110111011010001010101110100010101010010011011111000111001101101001100 
> 11100000001000000110110011000100101011000000101011111010111000111011010101011010100111000001100110011010111000110011110110101000 
> 1110111110101001110100000000101101010111100010110011010010000110000001100100101000100101010111101010010011101010100110101010000 
> 
> tak naprawdę nie ma nigdzie żadnego znaku nowej linii, czy wiersza.

To powinno zadziałać.
Re: Jak zrobić test za pomocą PractRand?
#217504
Author: osobli...
Date: Sat, 21 Aug 2021 21:35
21 lines
2886 bytes
Żeby uruchomić program trzeba wpisać:

python3 Collatzgenerator01.py | ./Konwerter.exe | ./RNG_test stdin

I znów dostałem komunikat:

"abort() has been called" (press retry to debug the aplication)

Po tym zignorowaniu lub ponowieniu wyskakuje:

RNG_test using PractRand version 0.93
RNG = RNG_stdin, seed = 0x9cd2b3e4
test set = normal, folding = standard(unknown format)

Traceback (most recent call last):
  File "Mojgenerator.py", line 50, in <module>
    print(binary)
BrokenPipeError: [Errno 32] Broken pipe
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe
Segmentation fault (core dumped)
Re: Jak zrobić test za pomocą PractRand?
#217505
Author: osobli...
Date: Sat, 21 Aug 2021 21:37
6 lines
3131 bytes
PS Program w konsoli działa normalnie, wypisuje liczby binarnie:

10010000011111101001010010111110000111100110001101110000110101100001110110000100111010001001101001010101000001110001011010011010
11000010010001100011011101000100101100100110001010001101110111011010001010101110100010101010010011011111000111001101101001100
11100000001000000110110011000100101011000000101011111010111000111011010101011010100111000001100110011010111000110011110110101000
1110111110101001110100000000101101010111100010110011010010000110000001100100101000100101010111101010010011101010100110101010000
Re: Jak zrobić test za pomocą PractRand?
#217506
Author: osobli...
Date: Sat, 21 Aug 2021 21:42
1 lines
2673 bytes
PS2 print(binary) to część mojego programu, która wypisuje liczby w postaci binarnej.
Re: Jak zrobić test za pomocą PractRand?
#217507
Author: osobli...
Date: Sat, 21 Aug 2021 22:17
90 lines
8662 bytes
Swoją drogą program zadziałał po komendzie:

python3 Mojgenerator.py | ./RNG_test stdin

Ale znowu wystąpiły FAILE i ten sam błąd:

RNG_test using PractRand version 0.93
RNG = RNG_stdin, seed = 0xb223f1b6
test set = normal, folding = standard(unknown format)

rng=RNG_stdin, seed=0xb223f1b6
length= 128 megabytes (2^27 bytes), time= 3.3 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-3,T)                  R=+17706724 p = 0           FAIL !!!!!!!!
  BCFN(2+1,13-3,T)                  R=+8369402 p = 0           FAIL !!!!!!!!
  BCFN(2+2,13-3,T)                  R=+4018669 p = 0           FAIL !!!!!!!!
  BCFN(2+3,13-3,T)                  R=+1951923 p = 0           FAIL !!!!!!!!
  BCFN(2+4,13-4,T)                  R=+1217378 p = 0           FAIL !!!!!!!!
  BCFN(2+5,13-5,T)                  R=+754738 p = 0           FAIL !!!!!!!!
  BCFN(2+6,13-5,T)                  R=+373439 p = 0           FAIL !!!!!!!!
  BCFN(2+7,13-6,T)                  R=+229795 p = 0           FAIL !!!!!!!!
  BCFN(2+8,13-6,T)                  R=+114286 p = 0           FAIL !!!!!!!!
  BCFN(2+9,13-7,T)                  R=+69277  p = 0           FAIL !!!!!!!!
  BCFN(2+10,13-8,T)                 R=+41033  p = 0           FAIL !!!!!!!!
  BCFN(2+11,13-8,T)                 R=+20468  p =  1e-5195    FAIL !!!!!!!!
  BCFN(2+12,13-9,T)                 R=+11745  p =  3e-2640    FAIL !!!!!!!!
  BCFN(2+13,13-9,T)                 R= +5857  p =  4e-1317    FAIL !!!!!!!!
  DC6-9x1Bytes-1                    R=+7289719 p = 0           FAIL !!!!!!!!
  Gap-16:A                          R=+3003944 p = 0           FAIL !!!!!!!!
  Gap-16:B                          R=+15169911 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(0,14-0)              R=+4703480 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(1,14-0)              R=+79390  p = 0           FAIL !!!!!!!!
  FPF-14+6/16:(4,14-2)              R=+7118595 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:all                   R=+6490693 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:all2                  R=+39503479195893 p = 0           FAIL !!!!!!!!
  FPF-14+6/16:cross                 R=+28219067 p = 0           FAIL !!!!!!!!
  BRank(12):128(4)                  R= +4256  p~=  2e-2264    FAIL !!!!!!!!
  BRank(12):256(4)                  R= +8744  p~=  1e-4651    FAIL !!!!!!!!
  BRank(12):384(1)                  R= +6353  p~=  2e-1913    FAIL !!!!!!!!
  BRank(12):512(2)                  R=+12622  p~=  1e-3800    FAIL !!!!!!!!
  BRank(12):768(1)                  R=+12316  p~=  2e-3708    FAIL !!!!!!!!
  BRank(12):1K(2)                   R=+24891  p~=  5e-7494    FAIL !!!!!!!!
  BRank(12):1536(1)                 R=+24672  p~=  4e-7428    FAIL !!!!!!!!
  [Low1/8]BCFN(2+0,13-5,T)          R=  +9.8  p =  4.9e-4   unusual
  [Low1/8]DC6-9x1Bytes-1            R= +50.0  p =  1.1e-28    FAIL !!!
  [Low1/8]FPF-14+6/16:(0,14-1)      R= +37.0  p =  1.4e-32    FAIL !!!
  [Low1/8]FPF-14+6/16:(1,14-2)      R= +25.8  p =  2.5e-22    FAIL !!
  [Low1/8]FPF-14+6/16:(2,14-2)      R= +15.9  p =  1.0e-13    FAIL
  [Low1/8]FPF-14+6/16:(3,14-3)      R=  +7.9  p =  1.2e-6   mildly suspicious
  [Low1/8]FPF-14+6/16:all           R= +48.8  p =  2.7e-45    FAIL !!!
  [Low1/8]FPF-14+6/16:all2          R=+504.6  p =  1.0e-174   FAIL !!!!!!
  [Low1/8]FPF-14+6/16:cross         R= +71.2  p =  2.2e-56    FAIL !!!!
  [Low4/32]BCFN(2+0,13-5,T)         R=+3546530 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+1,13-5,T)         R=+1676322 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+2,13-5,T)         R=+804897 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+3,13-5,T)         R=+390941 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+4,13-6,T)         R=+237394 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+5,13-6,T)         R=+116954 p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+6,13-7,T)         R=+70419  p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+7,13-8,T)         R=+41511  p = 0           FAIL !!!!!!!!
  [Low4/32]BCFN(2+8,13-8,T)         R=+20637  p =  2e-5238    FAIL !!!!!!!!
  [Low4/32]BCFN(2+9,13-9,T)         R=+11814  p =  1e-2655    FAIL !!!!!!!!
  [Low4/32]BCFN(2+10,13-9,T)        R= +5881  p =  1e-1322    FAIL !!!!!!!!
  [Low4/32]DC6-9x1Bytes-1           R=+1284826 p = 0           FAIL !!!!!!!!
  [Low4/32]Gap-16:A                 R=+412185 p = 0           FAIL !!!!!!!!
  [Low4/32]Gap-16:B                 R=+2520495 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(0,14-1)     R=+631088 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(1,14-2)     R=+12449  p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(4,14-4)     R=+705389 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(5,14-5)     R=+14266  p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(8,14-7)     R=+743698 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(9,14-8)     R=+14419  p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(12,14-10)   R=+535960 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:(13,14-11)   R= +8504  p =  3e-3707    FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:all          R=+999316 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:all2         R=+451461539040 p = 0           FAIL !!!!!!!!
  [Low4/32]FPF-14+6/16:cross        R=+5271881 p = 0           FAIL !!!!!!!!
  [Low4/32]BRank(12):128(4)         R= +3718  p~=  5e-1978    FAIL !!!!!!!!
  [Low4/32]BRank(12):256(2)         R= +5148  p~=  1e-1550    FAIL !!!!!!!!
  [Low4/32]BRank(12):384(1)         R= +5018  p~=  1e-1511    FAIL !!!!!!!!
  [Low4/32]BRank(12):512(2)         R= +8862  p~=  8e-2669    FAIL !!!!!!!!
  [Low4/32]BRank(12):768(1)         R= +8376  p~=  1e-2522    FAIL !!!!!!!!
  ...and 60 test result(s) without anomalies

Traceback (most recent call last):
  File "Collatzgenerator01.py", line 50, in <module>
    print(binary)
BrokenPipeError: [Errno 32] Broken pipe

Pytanie, czy program przetestował poprawnie, to co miał przetestować? Mam wątpliwości.
Re: Jak zrobić test za pomocą PractRand?
#217508
Author: M.M.
Date: Sun, 22 Aug 2021 00:31
96 lines
7859 bytes
On Sunday, August 22, 2021 at 12:17:58 AM UTC+2, osobli...@gmail.com wrote:
> Swoją drogą program zadziałał po komendzie: 
> 
> python3 Mojgenerator.py | ./RNG_test stdin 
> 
> Ale znowu wystąpiły FAILE i ten sam błąd:
> RNG_test using PractRand version 0.93
> RNG = RNG_stdin, seed = 0xb223f1b6
> test set = normal, folding = standard(unknown format)
> rng=RNG_stdin, seed=0xb223f1b6 
> length= 128 megabytes (2^27 bytes), time= 3.3 seconds
> Test Name Raw Processed Evaluation
> BCFN(2+0,13-3,T) R=+17706724 p = 0 FAIL !!!!!!!! 
> BCFN(2+1,13-3,T) R=+8369402 p = 0 FAIL !!!!!!!! 
> BCFN(2+2,13-3,T) R=+4018669 p = 0 FAIL !!!!!!!! 
> BCFN(2+3,13-3,T) R=+1951923 p = 0 FAIL !!!!!!!! 
> BCFN(2+4,13-4,T) R=+1217378 p = 0 FAIL !!!!!!!! 
> BCFN(2+5,13-5,T) R=+754738 p = 0 FAIL !!!!!!!! 
> BCFN(2+6,13-5,T) R=+373439 p = 0 FAIL !!!!!!!! 
> BCFN(2+7,13-6,T) R=+229795 p = 0 FAIL !!!!!!!! 
> BCFN(2+8,13-6,T) R=+114286 p = 0 FAIL !!!!!!!! 
> BCFN(2+9,13-7,T) R=+69277 p = 0 FAIL !!!!!!!! 
> BCFN(2+10,13-8,T) R=+41033 p = 0 FAIL !!!!!!!! 
> BCFN(2+11,13-8,T) R=+20468 p = 1e-5195 FAIL !!!!!!!! 
> BCFN(2+12,13-9,T) R=+11745 p = 3e-2640 FAIL !!!!!!!! 
> BCFN(2+13,13-9,T) R= +5857 p = 4e-1317 FAIL !!!!!!!! 
> DC6-9x1Bytes-1 R=+7289719 p = 0 FAIL !!!!!!!! 
> Gap-16:A R=+3003944 p = 0 FAIL !!!!!!!! 
> Gap-16:B R=+15169911 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:(0,14-0) R=+4703480 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:(1,14-0) R=+79390 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:(4,14-2) R=+7118595 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:all R=+6490693 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:all2 R=+39503479195893 p = 0 FAIL !!!!!!!! 
> FPF-14+6/16:cross R=+28219067 p = 0 FAIL !!!!!!!! 
> BRank(12):128(4) R= +4256 p~= 2e-2264 FAIL !!!!!!!! 
> BRank(12):256(4) R= +8744 p~= 1e-4651 FAIL !!!!!!!! 
> BRank(12):384(1) R= +6353 p~= 2e-1913 FAIL !!!!!!!! 
> BRank(12):512(2) R=+12622 p~= 1e-3800 FAIL !!!!!!!! 
> BRank(12):768(1) R=+12316 p~= 2e-3708 FAIL !!!!!!!! 
> BRank(12):1K(2) R=+24891 p~= 5e-7494 FAIL !!!!!!!! 
> BRank(12):1536(1) R=+24672 p~= 4e-7428 FAIL !!!!!!!! 
> [Low1/8]BCFN(2+0,13-5,T) R= +9.8 p = 4.9e-4 unusual 
> [Low1/8]DC6-9x1Bytes-1 R= +50.0 p = 1.1e-28 FAIL !!! 
> [Low1/8]FPF-14+6/16:(0,14-1) R= +37.0 p = 1.4e-32 FAIL !!! 
> [Low1/8]FPF-14+6/16:(1,14-2) R= +25.8 p = 2.5e-22 FAIL !! 
> [Low1/8]FPF-14+6/16:(2,14-2) R= +15.9 p = 1.0e-13 FAIL 
> [Low1/8]FPF-14+6/16:(3,14-3) R= +7.9 p = 1.2e-6 mildly suspicious 
> [Low1/8]FPF-14+6/16:all R= +48.8 p = 2.7e-45 FAIL !!! 
> [Low1/8]FPF-14+6/16:all2 R=+504.6 p = 1.0e-174 FAIL !!!!!! 
> [Low1/8]FPF-14+6/16:cross R= +71.2 p = 2.2e-56 FAIL !!!! 
> [Low4/32]BCFN(2+0,13-5,T) R=+3546530 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+1,13-5,T) R=+1676322 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+2,13-5,T) R=+804897 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+3,13-5,T) R=+390941 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+4,13-6,T) R=+237394 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+5,13-6,T) R=+116954 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+6,13-7,T) R=+70419 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+7,13-8,T) R=+41511 p = 0 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+8,13-8,T) R=+20637 p = 2e-5238 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+9,13-9,T) R=+11814 p = 1e-2655 FAIL !!!!!!!! 
> [Low4/32]BCFN(2+10,13-9,T) R= +5881 p = 1e-1322 FAIL !!!!!!!! 
> [Low4/32]DC6-9x1Bytes-1 R=+1284826 p = 0 FAIL !!!!!!!! 
> [Low4/32]Gap-16:A R=+412185 p = 0 FAIL !!!!!!!! 
> [Low4/32]Gap-16:B R=+2520495 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(0,14-1) R=+631088 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(1,14-2) R=+12449 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(4,14-4) R=+705389 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(5,14-5) R=+14266 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(8,14-7) R=+743698 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(9,14-8) R=+14419 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(12,14-10) R=+535960 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:(13,14-11) R= +8504 p = 3e-3707 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:all R=+999316 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:all2 R=+451461539040 p = 0 FAIL !!!!!!!! 
> [Low4/32]FPF-14+6/16:cross R=+5271881 p = 0 FAIL !!!!!!!! 
> [Low4/32]BRank(12):128(4) R= +3718 p~= 5e-1978 FAIL !!!!!!!! 
> [Low4/32]BRank(12):256(2) R= +5148 p~= 1e-1550 FAIL !!!!!!!! 
> [Low4/32]BRank(12):384(1) R= +5018 p~= 1e-1511 FAIL !!!!!!!! 
> [Low4/32]BRank(12):512(2) R= +8862 p~= 8e-2669 FAIL !!!!!!!! 
> [Low4/32]BRank(12):768(1) R= +8376 p~= 1e-2522 FAIL !!!!!!!! 
> ...and 60 test result(s) without anomalies
> Traceback (most recent call last):
> File "Collatzgenerator01.py", line 50, in <module>
> print(binary) 
> BrokenPipeError: [Errno 32] Broken pipe
> Pytanie, czy program przetestował poprawnie, to co miał przetestować? Mam wątpliwości.

Jeśli Twój program wyświetla binarne dane, to zwyczajnie nie przechodzi testów, bo ma
za słabą losowość. Jeśli wyświetla dane tekstowe, czyli binarne znaki ASCII '0' i '1',
czyli binarnie 00110000 i 00110001, to nawet jak ma dobrą losowość, nie przejdzie
testu, ponieważ tylko jeden bit się zmienia losowo, reszta jest ciągle taka sama.
Może zapisz do pliku to co wyświetla Twój program i zobacz w edytorze hexadecymalnym
jakie tam są naprawdę dane - binarne czy tekstowe, czy nie ma znaków nowej linii, itd.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217511
Author: osobli...
Date: Sun, 22 Aug 2021 00:32
21 lines
3674 bytes
Zrobiłem hexdump pierwszych bitów:

python3 Mojgenerator01.py | hexdump -n4000 | head

0000000 3031 3131 3131 3130 3131 3031 3131 3130
0000010 3131 3030 3030 3131 3030 3131 3131 3030
0000020 3030 3130 3031 3131 3030 3030 3131 3130
0000030 3030 3130 3030 3030 3131 3131 3131 3131
0000040 3031 3130 3131 3031 3031 3131 3030 3030
0000050 3031 3030 3030 3031 3130 3130 3030 3131
0000060 3131 3131 3131 3031 3130 3031 3131 3131
0000070 3030 3130 3130 3030 3030 0a31 3131 3130
0000080 3131 3031 3030 3131 3131 3130 3031 3131
0000090 3030 3131 3030 3030 3030 3031 3030 3131

Traceback (most recent call last):
  File "Collatzgenerator01.py", line 50, in <module>
    print(binary)
BrokenPipeError: [Errno 32] Broken pipe

I nie wygląda to dobrze. Po pierwsze nie mogę zrobić hexdumpu 4000 bajtów. Czy ta komenda ma jakieś ograniczenie, czy program mi się wykrzacza? Po drugie, tak na oko, to nie są losowe bity. Nie wiem o co chodzi. Czyżbym się walnął w kodzie albo napisał aż tak beznadziejny generator?
Re: Jak zrobić test za pomocą PractRand?
#217509
Author: osobli...
Date: Sun, 22 Aug 2021 00:37
24 lines
3876 bytes
> Jeśli Twój program wyświetla binarne dane, to zwyczajnie nie przechodzi testów, bo ma 
> za słabą losowość. Jeśli wyświetla dane tekstowe, czyli binarne znaki ASCII '0' i '1', 
> czyli binarnie 00110000 i 00110001, to nawet jak ma dobrą losowość, nie przejdzie 
> testu, ponieważ tylko jeden bit się zmienia losowo, reszta jest ciągle taka sama. 
> Może zapisz do pliku to co wyświetla Twój program i zobacz w edytorze hexadecymalnym 
> jakie tam są naprawdę dane - binarne czy tekstowe, czy nie ma znaków nowej linii, itd. 

Generuję liczbę w Pythonie:

liczba = 83866140218348733068398498750863724151

I konwertuję ją na liczbę binarną za pomocą:

binary = bin(liczba)[2:]

Otrzymuję:

111111000110000000011111110100101000111111111111010000101011110100001111100111010001001100101011111011010110110100111001110111

Ucinam pierwsze dwa znaki, bo inaczej miałbym dopisek:

0b111111000110000000011111110100101000111111111111010000101011110100001111100111010001001100101011111011010110110100111001110111

Może jednak wyświetla znaki tekstowe? Może każda "1" i każde "0" jest czytanie jako ASCII.
Re: Jak zrobić test za pomocą PractRand?
#217512
Author: M.M.
Date: Sun, 22 Aug 2021 00:43
48 lines
5328 bytes
On Sunday, August 22, 2021 at 2:32:25 AM UTC+2, osobli...@gmail.com wrote:
> Zrobiłem hexdump pierwszych bitów: 
> 
> python3 Mojgenerator01.py | hexdump -n4000 | head 
> 
> 0000000 3031 3131 3131 3130 3131 3031 3131 3130 
> 0000010 3131 3030 3030 3131 3030 3131 3131 3030 
> 0000020 3030 3130 3031 3131 3030 3030 3131 3130 
> 0000030 3030 3130 3030 3030 3131 3131 3131 3131 
> 0000040 3031 3130 3131 3031 3031 3131 3030 3030 
> 0000050 3031 3030 3030 3031 3130 3130 3030 3131 
> 0000060 3131 3131 3131 3031 3130 3031 3131 3131 
> 0000070 3030 3130 3130 3030 3030 0a31 3131 3130 
> 0000080 3131 3031 3030 3131 3131 3130 3031 3131 
> 0000090 3030 3131 3030 3030 3030 3031 3030 3131
> Traceback (most recent call last): 
> File "Collatzgenerator01.py", line 50, in <module> 
> print(binary) 
> BrokenPipeError: [Errno 32] Broken pipe
> I nie wygląda to dobrze. Po pierwsze nie mogę zrobić hexdumpu 4000 bajtów. Czy ta komenda ma jakieś ograniczenie, czy program mi się wykrzacza? Po drugie, tak na oko, to nie są losowe bity. Nie wiem o co chodzi. Czyżbym się walnął w kodzie albo napisał aż tak beznadziejny generator?

Wygląda bardzo dobrze, ale nie jak dane binarne, ale jak dane tekstowe, czyli potrzebujesz konwertera. U mnie wygląda podobnie:

 ./SimpPRNG 1 300 | xxd 
00000000: 3131 3030 3031 3031 3131 3030 3031 3131  1100010111000111
00000010: 3131 3030 3030 3031 3131 3130 3130 3131  1100000111101011
00000020: 3131 3030 3130 3031 3031 3130 3130 3030  1100100101101000
00000030: 3131 3130 3030 3131 3131 3030 3131 3131  1110001111001111
00000040: 3030 3030 3030 3030 3131 3131 3130 3031  0000000011111001
00000050: 3030 3031 3031 3130 3131 3131 3131 3130  0001011011111110
00000060: 3030 3030 3131 3131 3131 3130 3130 3031  0000111111101001
00000070: 3030 3131 3030 3030 3031 3130 3131 3030  0011000001101100
00000080: 3131 3030 3130 3131 3130 3130 3030 3130  1100101110100010
00000090: 3031 3030 3131 3031 3131 3031 3131 3131  0100110111011111
000000a0: 3030 3130 3130 3131 3130 3131 3031 3131  0010101110110111
000000b0: 3031 3030 3131 3031 3130 3031 3130 3030  0100110110011000
000000c0: 3130 3031 3131 3130 3030 3130 3130 3131  1001111000101011
000000d0: 3030 3030 3031 3030 3030 3031 3131 3031  0000010000011101
000000e0: 3031 3130 3130 3031 3131 3131 3130 3131  0110100111111011
000000f0: 3131 3131 3030 3030 3031 3031 3130 3031  1111000001011001
00000100: 3031 3131 3131 3130 3030 3130 3130 3130  0111111000101010
00000110: 3031 3031 3030 3030 3030 3031 3031 3131  0101000000010111
00000120: 3131 3130 3030 3031 3130 3031            111000011001

Tylko u CIebie jest znak '0a31' na którym zapewne wywala się konwerter. 
Zobacz skąd jest to 0a, wywal i uruchom przez konwerter.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217510
Author: M.M.
Date: Sun, 22 Aug 2021 00:44
26 lines
3983 bytes
On Sunday, August 22, 2021 at 2:37:03 AM UTC+2, osobli...@gmail.com wrote:
> > Jeśli Twój program wyświetla binarne dane, to zwyczajnie nie przechodzi testów, bo ma 
> > za słabą losowość. Jeśli wyświetla dane tekstowe, czyli binarne znaki ASCII '0' i '1', 
> > czyli binarnie 00110000 i 00110001, to nawet jak ma dobrą losowość, nie przejdzie 
> > testu, ponieważ tylko jeden bit się zmienia losowo, reszta jest ciągle taka sama. 
> > Może zapisz do pliku to co wyświetla Twój program i zobacz w edytorze hexadecymalnym 
> > jakie tam są naprawdę dane - binarne czy tekstowe, czy nie ma znaków nowej linii, itd.
> Generuję liczbę w Pythonie: 
> 
> liczba = 83866140218348733068398498750863724151 
> 
> I konwertuję ją na liczbę binarną za pomocą: 
> 
> binary = bin(liczba)[2:] 
> 
> Otrzymuję: 
> 
> 111111000110000000011111110100101000111111111111010000101011110100001111100111010001001100101011111011010110110100111001110111 
> 
> Ucinam pierwsze dwa znaki, bo inaczej miałbym dopisek: 
> 
> 0b111111000110000000011111110100101000111111111111010000101011110100001111100111010001001100101011111011010110110100111001110111 
> 
> Może jednak wyświetla znaki tekstowe? Może każda "1" i każde "0" jest czytanie jako ASCII.

Po tym co wyświetlił hexeditor na pewno to są znaki ascii.
Re: Jak zrobić test za pomocą PractRand?
#217513
Author: osobli...
Date: Sun, 22 Aug 2021 00:47
151 lines
18683 bytes
niedziela, 22 sierpnia 2021 o 02:43:32 UTC+2 M.M. napisał(a):
> On Sunday, August 22, 2021 at 2:32:25 AM UTC+2, osobli...@gmail.com wrote: 
> > Zrobiłem hexdump pierwszych bitów: 
> > 
> > python3 Mojgenerator01.py | hexdump -n4000 | head 
> > 
> > 0000000 3031 3131 3131 3130 3131 3031 3131 3130 
> > 0000010 3131 3030 3030 3131 3030 3131 3131 3030 
> > 0000020 3030 3130 3031 3131 3030 3030 3131 3130 
> > 0000030 3030 3130 3030 3030 3131 3131 3131 3131 
> > 0000040 3031 3130 3131 3031 3031 3131 3030 3030 
> > 0000050 3031 3030 3030 3031 3130 3130 3030 3131 
> > 0000060 3131 3131 3131 3031 3130 3031 3131 3131 
> > 0000070 3030 3130 3130 3030 3030 0a31 3131 3130 
> > 0000080 3131 3031 3030 3131 3131 3130 3031 3131 
> > 0000090 3030 3131 3030 3030 3030 3031 3030 3131 
> > Traceback (most recent call last): 
> > File "Collatzgenerator01.py", line 50, in <module> 
> > print(binary) 
> > BrokenPipeError: [Errno 32] Broken pipe 
> > I nie wygląda to dobrze. Po pierwsze nie mogę zrobić hexdumpu 4000 bajtów. Czy ta komenda ma jakieś ograniczenie, czy program mi się wykrzacza? Po drugie, tak na oko, to nie są losowe bity. Nie wiem o co chodzi. Czyżbym się walnął w kodzie albo napisał aż tak beznadziejny generator?
> Wygląda bardzo dobrze, ale nie jak dane binarne, ale jak dane tekstowe, czyli potrzebujesz konwertera. U mnie wygląda podobnie: 
> 
> ./SimpPRNG 1 300 | xxd 
> 00000000: 3131 3030 3031 3031 3131 3030 3031 3131 1100010111000111 
> 00000010: 3131 3030 3030 3031 3131 3130 3130 3131 1100000111101011 
> 00000020: 3131 3030 3130 3031 3031 3130 3130 3030 1100100101101000 
> 00000030: 3131 3130 3030 3131 3131 3030 3131 3131 1110001111001111 
> 00000040: 3030 3030 3030 3030 3131 3131 3130 3031 0000000011111001 
> 00000050: 3030 3031 3031 3130 3131 3131 3131 3130 0001011011111110 
> 00000060: 3030 3030 3131 3131 3131 3130 3130 3031 0000111111101001 
> 00000070: 3030 3131 3030 3030 3031 3130 3131 3030 0011000001101100 
> 00000080: 3131 3030 3130 3131 3130 3130 3030 3130 1100101110100010 
> 00000090: 3031 3030 3131 3031 3131 3031 3131 3131 0100110111011111 
> 000000a0: 3030 3130 3130 3131 3130 3131 3031 3131 0010101110110111 
> 000000b0: 3031 3030 3131 3031 3130 3031 3130 3030 0100110110011000 
> 000000c0: 3130 3031 3131 3130 3030 3130 3130 3131 1001111000101011 
> 000000d0: 3030 3030 3031 3030 3030 3031 3131 3031 0000010000011101 
> 000000e0: 3031 3130 3130 3031 3131 3131 3130 3131 0110100111111011 
> 000000f0: 3131 3131 3030 3030 3031 3031 3130 3031 1111000001011001 
> 00000100: 3031 3131 3131 3130 3030 3130 3130 3130 0111111000101010 
> 00000110: 3031 3031 3030 3030 3030 3031 3031 3131 0101000000010111 
> 00000120: 3131 3130 3030 3031 3130 3031 111000011001 
> 
> Tylko u CIebie jest znak '0a31' na którym zapewne wywala się konwerter. 
> Zobacz skąd jest to 0a, wywal i uruchom przez konwerter. 
> 
> Pozdrawiam

Pierwsze 100 liczb. Nie widzę tam żadnych podejrzanych znaków:

101111011110110111000011001111000001101100001101000100001111111110011110101100001000001001010011111111100110111100010100001
11011110001111011011001100000010001110101100111101000001101000110001010101010001101110011101100101101110101000010001011001110000
10111100011001100111011010111101100111100101101101111010110111011011111100110110001011101100100011110011101001011111011111111
1110100101111111010011110000010111110000010101101111101110100011000011011000101001111100010100011001111111011111000100110111011
1100101010011011111101100101100100011011110000101010111110000000110101010111111000101001011111010010010011000100110110010101
10000001111001110101000000010000111010010011000101101011100000101111010010011011111101010101101011100101110001001011011011110110
101000100111010010101000110100100110010001001101001010111110000000110001111101010010111100010110000011100010100000110001100011
1110110100111110111101011111100011011011011010011111000100000100111000100101111100100000101001001011001100000110100100010100
100001010100000000011001111110010101001000001010010000010110001000110111010110000110011111010011000001101010010111110101110101
1000010100010011001100000010110100001000011111010001011001100000001011100011000000101110110001111100010000100100001101101101000
11110000101001110110110000010100100111110010000111010011010000010110010011010110010011010000011110011100010001100111001110010001
10111111001111111110010001110111001101101100101001111110011111010001011001101000111010101000110011111001101100001010001000111110
1100110110101101011111110000000110010010001110011111110101000100100101001011111000111011101110101110011000101100111010010111110
11010011000110101000000010111101110101000011111000001001110000101100010101110111111111101110100111110000100010100100110000000110
10111100110010100110111111011011010011011011100011101101010100101111000100111010001001000001010111110010001101011010101101001110
10001010110101001000010110100011100111111111001011010101111001000110010111010000101100100010110001110101101100100110111010110111
1111110000110011111010110111110010100011000000000110101111101101111101000011011110001100011000011000011000011011010001010101
11000011110111000000110011000000100111011111010001110010010000000101001110011111110000101011001010111100011101110101011000011010
110100100101001011001001110100010111101101110010110010010101110000000101001111010001000100100101101110010000001000011100101000
1110001010010100000010100101110010011110100010111111000110011110010011011001111010000001101001011110101001000010000100110011000
11110011010111000010101100100111011000111000000111100000000111001100101011100001000101100101110101101010111000110001101110110001
11011010110011101101001011010101000111011111001010011001111001010000001011110011110011111001000111111111010110111010100001001100
1100110100000001000011101010111110010101011101101001010100110001011111100000001110101011110101010001010101000011001100010110010
10010000011111000000000000111000000110110101010101000110011101110001111101010111110010111011101000001000111110001110100101101101
1000011011010110100001111111101100110000111111101000100001000110010001101011101011010111100111111000000001011000011000101100000
1110101100011010100111111011010101111110100111011010110001110011100010111110101111001111110001011010101110101110010101110010111
1111011110101010000100101111100101000000101110000010110101001011111010111001010111100110110000001100000000000100001111001100000
111010001101111000000111110101100111010011010110101110111000011010010000010000011011001110010111000001111000110000010010011100
11001100011010100001010011111100011100100001011100100101111010001010101000011101011000110101001100110110111100111101111010
11110100100101100011100101011011010010100000000111110000010110110010000000100000011011000001010100010100010010001100000101101
10010110111000000001000011011110100100101000011010110000100010110000100111001100110001110110010010101000100001011001110110101000
1001100110111000110111101001010100011000011110110000010101001010000001110011111000001101011000110010110101100101110110101010100
1101011011011000010100110010011100111111100101000000010011110011100001011100000111111001001100010011100100000100110100010001001
11000011110110001000011100001000001010100011011111101101000011100110011111111100110010011111111011011000010000010001010011100101
11000000010011001100111011111001000100011110110111001111110001100001000011100011111100010110100001001010111110101111000111100111
10010001111110111101111100011101001001111101101000010110000000000100011100010111000011011101100010101001110000111101101111010100
1010110101100000010101111110101110010111000001000001000100101101001001001110000111110011010011100100111001111111101010110000
11000010010011111110101010000110110011001110001001110101010011101001011111110101100000100100010101110011101001111011100111111000
1100011001001010010101101111011001001100110111011101100001010001110011001010110101010100010001100110001110111101100110010100110
1100101101000010011010000011001110000101111100001110010110000011111110010001100010010000000000000011111000111101111001111101111
10110100110001100100010111111011011000000110101111011011110100111000001010011011111111100000010011010110001110110000110001111101
11000110100110001010001100011111000100011010111110101010000111110101100000100011110011111101010111100001000111110001010000011000
10001011101111011010000110110010101101101101100011001100100011111011001101101011100110110011100101011001110100110000111100111101
10000010100110000011110110011100101111100010110001111000100011110011100010000010100000111111100001101011011100011000010110011
101101001001010111100001100000011010101001011110010010110101111001110001110011011010100010010111111000100100000101010110001101
110001110010100001011010110111101100000011111010010110000100101110110100110111111111101001001100011110111000111111111101100111
1101110010111100000101101000111100110101111101100100001011001000101000110111000010010110111001010110011011111011000001010001111
1100111101111001001110111110100011111110111111010011111101000011001011100101110110110011101111001100101101010110111100110000
11111110110001000001011111010011001010101000000011110011100001101111000110101010011111110101111010011000111100101000001100100000
1100000100101010011011110100010100011101100001110010110100110000111010110011000000010000110011011101110111011110000001101000100
10100111111001001010000100001000111010101101000101001001010100001011111100001100101111001001100000010011001100010101100100001101
11100101100110011101000101001011101010010000010100000111100011001011110101000110110100011100100001001011100000000000101001100010
1101010000101101110101001011010111100100001010110001000111101010101111101100101001001110101000011101100010111011100011111010001
11111111111001010000011011100101100001100110111110100101100000111100111111000010011101001000101101000100101100001110100011011000
111101000100000101100111100101001100000001110111000110111110111010011101000110101001101001011100011010111100001110110110110010
1100010000001111111011001101111010100100011111000111010001010100000111001010100111001010011010001000000010010101100111100111010
10011010000001100010110011000110011000011001000110110010010110101001111011010011011111011000001101011101110111001111001110001011
11010000100100000110100110001001110011110100101100101010010101110100100110100000101110010101110111111111100111101001000010110
1111000011010110000111110010010010010101010000011001111001111000110001000101100100110111000100110110011111000101010110010010101
10001111111110100001011010110110010110000010101111111010001111101010011100110101000010111000111101111101100010101011111011101111
1101111000010111111100010011001001010010100001111011110100110100011010110100011010001001110001100101101101000101000111110010100
10011010110010100111111011001010101101000111110011011011011111111001101010000001110101111100011011101011111010101100010110100110
1110011111101110111010001100101111100001101010011101000000101010011000001000101010011011110111000000100000010010110001000000001
11000100111110010000100011111001110100110000001110111000110001101001100111001111110011001110011001010111111000111110000001000111
11001010001001101000011111100111001011001110000000110111110011011101101111111010000100000111010111111001011111110101000100010011
10110110110010110100110011010011000111111101001010101001111010110110111100010000111000100000010010001100001011000010000011
10001011111011011100111000000111101101000111101000111110111101100000110101110110010100000001010011000110010010111011110010001
10011011101001010111001010000010110111001111001111001001101000001100111011111111110110010001111000111010000001100100001010111001
11000101101110100010110010111001011101000001111111000111101101001111101110010100110010000110100010011101110011010011110101001110
11110100001100111110011001110100101010111011100111110000010110011010111010000010100000111010010101101000101000001010000010101110
11111100101010110101100011000101101011101000110101011001010111001001111000111010101011110001110010110111001001101100011110000100
10101111110101110001001110000101101011100000100100110100111000100111001101011001110010100001010000111011100010000111011001
100111111011101111111000000110100111000101100110001111010110001001000101010100010011011001000111000011101001010000011010010000
111100001100101001001011110100111100000111001110110010110100001001100110010110110001000111111000100000111110110001010000111010
10000110111000010111001010100110000101001110110110001110010100001111110110111011100110010101011000001010110110111010010001111111
100011111111011011100111110111110001001010011111011001001000001111000101111100011100101110011010110110010001101100101010111
101010011011010010010111101011101011001001001000111100010001100101111000010101001110000110001101011000110000110100101111000
10111111100000100111100100100111010010110110101010000000110000001000000010110010011111000110010001011010110011100111110100011011
11100111101010101011111001101011001000111001101010100100111110011111100000011100111110011011010010111110101011110000001100100001
10100101110110111111011011011111111011001101011100111011101011001011110101010100001110010100001010101101110010111100110111010
100011000011101011000011100110110010101001011101000111100100000011001011101101110101100001111001111101101010001100111001011
11110011110100001101101110111110111110100001111010111001110101000011110100000111011101001011110100010111001000000011001010010000
10111010101011000011001101110001001110010101110001010011011010101011001111100011010110110001110110011111101100110001100011010
11001101111001100000000000110111000101110010011001101001101100100100001011011101110101110111100011011101011100000110100001100001
1110000101000101011001010100110000010111111011111111101101001101011110011011000000011111110110110100111001010001111100100101110
1011110010001011001001101001011000111110000111000000110100010011110110010100010010010101110101000011010001100000101010000100001
11110111101010110110000110100110010101111010000100001111101010001111101010111011100111101010001110000100000011110111101000111001
101010001111100101100001100100100110100000100110010101000101100000100111001001111111000001110001110001101110110000110100101101
1011000010100010100001111101101111110000001011111110000011111101010100010000111000100110100011111100000001011111001111101111000
10000111101111111010110101110110100000110111011001011011000100111011111011101110111010110101000110100100101010001000110110010101
1000000101011010010000000111011100100110000100010000110111111101010110011000100100100111010010000010010000110110010010010010111
1000010011101000110101001010000100011101101100110001001100011000101010110011001000101111000111110111111100110010110010110010110
1011101111111100110100000111000101010100100010100011010101001100001110010101100111000101001000000110010111011100001111011100011
10101001100000011010011001000001001101111100010010100111011111000010001100100001111010000011000100011100101011000100111111100111
11011110111111101100110000111101011010100101001111111101110001111101100101111100010001111111011011001101110110100100110000111011
100110010000010001001110101010010100110100011011110010100001010111100000100101100101101110111011110011110111110111110011111
100110111010001100111100101011000010001010000111000101000001111010000101111010101010010001110001101111100111010100001000100010
11001100110101100011111010111110000100001100101110111000110110111011111100010011000100101010011101001101000100001001111111000011
1001100101011110011010010001010011011010111100001111001100000000011011000101010101001001011010011110010100000111111110100010011
10011001100001111010011101000111011001010100010110000010011011100001000101101111011000101000100010111111111010111110010010000110
Re: Jak zrobić test za pomocą PractRand?
#217514
Author: M.M.
Date: Sun, 22 Aug 2021 00:54
59 lines
8968 bytes
On Sunday, August 22, 2021 at 2:47:07 AM UTC+2, osobli...@gmail.com wrote:
> niedziela, 22 sierpnia 2021 o 02:43:32 UTC+2 M.M. napisał(a): 
> > On Sunday, August 22, 2021 at 2:32:25 AM UTC+2, osobli...@gmail.com wrote: 
> > > Zrobiłem hexdump pierwszych bitów: 
> > > 
> > > python3 Mojgenerator01.py | hexdump -n4000 | head 
> > > 
> > > 0000000 3031 3131 3131 3130 3131 3031 3131 3130 
> > > 0000010 3131 3030 3030 3131 3030 3131 3131 3030 
> > > 0000020 3030 3130 3031 3131 3030 3030 3131 3130 
> > > 0000030 3030 3130 3030 3030 3131 3131 3131 3131 
> > > 0000040 3031 3130 3131 3031 3031 3131 3030 3030 
> > > 0000050 3031 3030 3030 3031 3130 3130 3030 3131 
> > > 0000060 3131 3131 3131 3031 3130 3031 3131 3131 
> > > 0000070 3030 3130 3130 3030 3030 0a31 3131 3130 
> > > 0000080 3131 3031 3030 3131 3131 3130 3031 3131 
> > > 0000090 3030 3131 3030 3030 3030 3031 3030 3131 
> > > Traceback (most recent call last): 
> > > File "Collatzgenerator01.py", line 50, in <module> 
> > > print(binary) 
> > > BrokenPipeError: [Errno 32] Broken pipe 
> > > I nie wygląda to dobrze. Po pierwsze nie mogę zrobić hexdumpu 4000 bajtów. Czy ta komenda ma jakieś ograniczenie, czy program mi się wykrzacza? Po drugie, tak na oko, to nie są losowe bity. Nie wiem o co chodzi. Czyżbym się walnął w kodzie albo napisał aż tak beznadziejny generator? 
> > Wygląda bardzo dobrze, ale nie jak dane binarne, ale jak dane tekstowe, czyli potrzebujesz konwertera. U mnie wygląda podobnie: 
> > 
> > ./SimpPRNG 1 300 | xxd 
> > 00000000: 3131 3030 3031 3031 3131 3030 3031 3131 1100010111000111 
> > 00000010: 3131 3030 3030 3031 3131 3130 3130 3131 1100000111101011 
> > 00000020: 3131 3030 3130 3031 3031 3130 3130 3030 1100100101101000 
> > 00000030: 3131 3130 3030 3131 3131 3030 3131 3131 1110001111001111 
> > 00000040: 3030 3030 3030 3030 3131 3131 3130 3031 0000000011111001 
> > 00000050: 3030 3031 3031 3130 3131 3131 3131 3130 0001011011111110 
> > 00000060: 3030 3030 3131 3131 3131 3130 3130 3031 0000111111101001 
> > 00000070: 3030 3131 3030 3030 3031 3130 3131 3030 0011000001101100 
> > 00000080: 3131 3030 3130 3131 3130 3130 3030 3130 1100101110100010 
> > 00000090: 3031 3030 3131 3031 3131 3031 3131 3131 0100110111011111 
> > 000000a0: 3030 3130 3130 3131 3130 3131 3031 3131 0010101110110111 
> > 000000b0: 3031 3030 3131 3031 3130 3031 3130 3030 0100110110011000 
> > 000000c0: 3130 3031 3131 3130 3030 3130 3130 3131 1001111000101011 
> > 000000d0: 3030 3030 3031 3030 3030 3031 3131 3031 0000010000011101 
> > 000000e0: 3031 3130 3130 3031 3131 3131 3130 3131 0110100111111011 
> > 000000f0: 3131 3131 3030 3030 3031 3031 3130 3031 1111000001011001 
> > 00000100: 3031 3131 3131 3130 3030 3130 3130 3130 0111111000101010 
> > 00000110: 3031 3031 3030 3030 3030 3031 3031 3131 0101000000010111 
> > 00000120: 3131 3130 3030 3031 3130 3031 111000011001 
> > 
> > Tylko u CIebie jest znak '0a31' na którym zapewne wywala się konwerter. 
> > Zobacz skąd jest to 0a, wywal i uruchom przez konwerter. 
> > 
> > Pozdrawiam
> Pierwsze 100 liczb. Nie widzę tam żadnych podejrzanych znaków: 


A ja widzę że wszystkie liczby zaczynają się od jedynki, nie są równej długości, a znaku nowej linii po prostu nie zobaczysz, wydać po prostu nową linię, zobacz jak to wygląda u mnie: 


./SimpPRNG 1 3000
110001011100011111000001111010111100100101101000111000111100111100000000111110010001011011111110000011111110100100110000011011001100101110100010010011011101111100101011101101110100110110011000100111100010101100000100000111010110100111111011111100000101100101111110001010100101000000010111111000011001001110011110101101011111000010010110011010000111010000011010101000110001000001100011110111000111001111100010110111010011001011001101100000100110110001101101111110010100001011010111011101101011111110000110110101110101101110000010000111001001110001000110110001111001100010001001101100110001010001001111001110100101001000001101010100010111110010010111001001100000100000110110110011010111000010101101001111010110100010001011000000010100111111010111001100111000111011001111001110101110100000100100100110010011111011111011000011001010101101100110001010001011100001001010010010000001110101010100110100101110101111000100011100000000011000000010111000001011010011011101100010001010111000001001001100110100010111100101101111100000011110110000100111010111000010110111100111001011110000010001001011100001010100111110001110100010100000011111110111111001111110100010011111001111000110100011000011011001111000110001000010100111000000001000001110100101111001010111101000001100111011001110110111111010001100110100010001100101010000100100011010010000000110010101110000111101011110010111001001101010101111011100110110011010101010001101101010101010000011000101000110110011100110101001101000111110100111010011000111010000111101110101111011111110101011010001000111101100110100001100111100100101000111011101110010110001101011100110101110010111100110000000011100001110101111100110100001010111110100101001110110111111101111000011100100100010011100001100001111011110111011000001111100011101001101110011110010001011111001100100111101101011111100010001110000100101011000010000000101111101100000011010101010000101111011000111000010001111011001010000011011000011000110111100111110111001111111000001100010111101010001000000111000011110110011111010110100011010101111000000001011000101111101000001011110110111111111000010010100111111010101110110101111010111101100010011001000001001101001111000111011111101001011000110110000011001000110111110000011111100101110011001010011100110001110100110010101110000101000011101011101111101111110110000010100011001001110111000111011011100011100100011111110101000010000010110001000001000100001101001000010000001000001110001000010000101010111111011111110010010111011101010111000100000010011010111001101011001100010010100010100000110011000101100101101100011011101100010010100101101101111000110111001000100111110111100100010100100101100100010100000010100110000100111101110010000101011010001101011010110111001001110001011000011000100000010000100110101101101111100110100100111100010000101011111011000111010110110110110110101001000111011000110100010110110101010101111010111111001111000110010000011010010101010001000100001101111111111111101000100010101100101100011110001011100011011010001101010010001100000

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217515
Author: osobli...
Date: Sun, 22 Aug 2021 00:58
60 lines
9490 bytes
niedziela, 22 sierpnia 2021 o 02:54:08 UTC+2 M.M. napisał(a):
> On Sunday, August 22, 2021 at 2:47:07 AM UTC+2, osobli...@gmail.com wrote: 
> > niedziela, 22 sierpnia 2021 o 02:43:32 UTC+2 M.M. napisał(a): 
> > > On Sunday, August 22, 2021 at 2:32:25 AM UTC+2, osobli...@gmail.com wrote: 
> > > > Zrobiłem hexdump pierwszych bitów: 
> > > > 
> > > > python3 Mojgenerator01.py | hexdump -n4000 | head 
> > > > 
> > > > 0000000 3031 3131 3131 3130 3131 3031 3131 3130 
> > > > 0000010 3131 3030 3030 3131 3030 3131 3131 3030 
> > > > 0000020 3030 3130 3031 3131 3030 3030 3131 3130 
> > > > 0000030 3030 3130 3030 3030 3131 3131 3131 3131 
> > > > 0000040 3031 3130 3131 3031 3031 3131 3030 3030 
> > > > 0000050 3031 3030 3030 3031 3130 3130 3030 3131 
> > > > 0000060 3131 3131 3131 3031 3130 3031 3131 3131 
> > > > 0000070 3030 3130 3130 3030 3030 0a31 3131 3130 
> > > > 0000080 3131 3031 3030 3131 3131 3130 3031 3131 
> > > > 0000090 3030 3131 3030 3030 3030 3031 3030 3131 
> > > > Traceback (most recent call last): 
> > > > File "Collatzgenerator01.py", line 50, in <module> 
> > > > print(binary) 
> > > > BrokenPipeError: [Errno 32] Broken pipe 
> > > > I nie wygląda to dobrze. Po pierwsze nie mogę zrobić hexdumpu 4000 bajtów. Czy ta komenda ma jakieś ograniczenie, czy program mi się wykrzacza? Po drugie, tak na oko, to nie są losowe bity. Nie wiem o co chodzi. Czyżbym się walnął w kodzie albo napisał aż tak beznadziejny generator? 
> > > Wygląda bardzo dobrze, ale nie jak dane binarne, ale jak dane tekstowe, czyli potrzebujesz konwertera. U mnie wygląda podobnie: 
> > > 
> > > ./SimpPRNG 1 300 | xxd 
> > > 00000000: 3131 3030 3031 3031 3131 3030 3031 3131 1100010111000111 
> > > 00000010: 3131 3030 3030 3031 3131 3130 3130 3131 1100000111101011 
> > > 00000020: 3131 3030 3130 3031 3031 3130 3130 3030 1100100101101000 
> > > 00000030: 3131 3130 3030 3131 3131 3030 3131 3131 1110001111001111 
> > > 00000040: 3030 3030 3030 3030 3131 3131 3130 3031 0000000011111001 
> > > 00000050: 3030 3031 3031 3130 3131 3131 3131 3130 0001011011111110 
> > > 00000060: 3030 3030 3131 3131 3131 3130 3130 3031 0000111111101001 
> > > 00000070: 3030 3131 3030 3030 3031 3130 3131 3030 0011000001101100 
> > > 00000080: 3131 3030 3130 3131 3130 3130 3030 3130 1100101110100010 
> > > 00000090: 3031 3030 3131 3031 3131 3031 3131 3131 0100110111011111 
> > > 000000a0: 3030 3130 3130 3131 3130 3131 3031 3131 0010101110110111 
> > > 000000b0: 3031 3030 3131 3031 3130 3031 3130 3030 0100110110011000 
> > > 000000c0: 3130 3031 3131 3130 3030 3130 3130 3131 1001111000101011 
> > > 000000d0: 3030 3030 3031 3030 3030 3031 3131 3031 0000010000011101 
> > > 000000e0: 3031 3130 3130 3031 3131 3131 3130 3131 0110100111111011 
> > > 000000f0: 3131 3131 3030 3030 3031 3031 3130 3031 1111000001011001 
> > > 00000100: 3031 3131 3131 3130 3030 3130 3130 3130 0111111000101010 
> > > 00000110: 3031 3031 3030 3030 3030 3031 3031 3131 0101000000010111 
> > > 00000120: 3131 3130 3030 3031 3130 3031 111000011001 
> > > 
> > > Tylko u CIebie jest znak '0a31' na którym zapewne wywala się konwerter. 
> > > Zobacz skąd jest to 0a, wywal i uruchom przez konwerter. 
> > > 
> > > Pozdrawiam 
> > Pierwsze 100 liczb. Nie widzę tam żadnych podejrzanych znaków:
> A ja widzę że wszystkie liczby zaczynają się od jedynki, nie są równej długości, a znaku nowej linii po prostu nie zobaczysz, wydać po prostu nową linię, zobacz jak to wygląda u mnie: 
> 
> 
> ./SimpPRNG 1 3000 
> 110001011100011111000001111010111100100101101000111000111100111100000000111110010001011011111110000011111110100100110000011011001100101110100010010011011101111100101011101101110100110110011000100111100010101100000100000111010110100111111011111100000101100101111110001010100101000000010111111000011001001110011110101101011111000010010110011010000111010000011010101000110001000001100011110111000111001111100010110111010011001011001101100000100110110001101101111110010100001011010111011101101011111110000110110101110101101110000010000111001001110001000110110001111001100010001001101100110001010001001111001110100101001000001101010100010111110010010111001001100000100000110110110011010111000010101101001111010110100010001011000000010100111111010111001100111000111011001111001110101110100000100100100110010011111011111011000011001010101101100110001010001011100001001010010010000001110101010100110100101110101111000100011100000000011000000010111000001011010011011101100010001010111000001001001100110100010111100101101111100000011110110000100111010111000010110111100111001011110000010001001011100001010100111110001110100010100000011111110111111001111110100010011111001111000110100011000011011001111000110001000010100111000000001000001110100101111001010111101000001100111011001110110111111010001100110100010001100101010000100100011010010000000110010101110000111101011110010111001001101010101111011100110110011010101010001101101010101010000011000101000110110011100110101001101000111110100111010011000111010000111101110101111011111110101011010001000111101100110100001100111100100101000111011101110010110001101011100110101110010111100110000000011100001110101111100110100001010111110100101001110110111111101111000011100100100010011100001100001111011110111011000001111100011101001101110011110010001011111001100100111101101011111100010001110000100101011000010000000101111101100000011010101010000101111011000111000010001111011001010000011011000011000110111100111110111001111111000001100010111101010001000000111000011110110011111010110100011010101111000000001011000101111101000001011110110111111111000010010100111111010101110110101111010111101100010011001000001001101001111000111011111101001011000110110000011001000110111110000011111100101110011001010011100110001110100110010101110000101000011101011101111101111110110000010100011001001110111000111011011100011100100011111110101000010000010110001000001000100001101001000010000001000001110001000010000101010111111011111110010010111011101010111000100000010011010111001101011001100010010100010100000110011000101100101101100011011101100010010100101101101111000110111001000100111110111100100010100100101100100010100000010100110000100111101110010000101011010001101011010110111001001110001011000011000100000010000100110101101101111100110100100111100010000101011111011000111010110110110110110101001000111011000110100010110110101010101111010111111001111000110010000011010010101010001000100001101111111111111101000100010101100101100011110001011100011011010001101010010001100000 
> 
> Pozdrawiam

Ok, czyli u mnie najwyraźniej jest nowa linia, pomimo, że nie została wstawiona. Jeżeli te same dane zapisuję wprost do pliku, to wyglądają tak jak Twoje. Ale w terminalu są wypisywane jedna pod drugą, pomimo, że ja żadnej nowej linii nie wstawiam.
Re: Jak zrobić test za pomocą PractRand?
#217516
Author: osobli...
Date: Sun, 22 Aug 2021 01:10
5 lines
3519 bytes
O ile rozwiązanie na dopisane z powrotem uciętych zer można znaleźć, to jak rozwiązać problem nowej linii - nie wiem. Każda iteracja pętli generuje liczbę, którą po prostu wypisuję:

print(binary)

Nie wiem jak można to zrobić inaczej. Zrobić z tego stringa i sklejać to w jednego wielkiego stringa? Raczej nie starczy pamięci na takiego stringa. Wydaje mi się, że nie powinienem w ogóle tego wypisywać za pomocą print, tylko stworzyć funkcję, która będzie zwracać liczbę. Wtedy nie będzie konwersji na ASCII, ani nie będzie znaków nowej linii, bo liczby nie będą wypisywane w terminalu, ani nigdzie. Na razie nie wiem jak taką funkcję napisać. Jutro spróbuję to zrobić.
Re: Jak zrobić test za pomocą PractRand?
#217517
Author: osobli...
Date: Sun, 22 Aug 2021 03:08
26 lines
5884 bytes
Jednak tego raczej nie przeskoczę. Print zawsze będzie wypisywał liczbę linijka po linijce i będzie się tam prawdopodobnie pojawiać znak nowej linii, pomimo, że ja go nie wstawiam. Nie będzie się pojawiać tylko podczas zapisu do pliku funkcją write. A wywołanie funkcji bez printa ani write nic nie zrobi i nie poda nigdzie żadnych liczb. Chyba, że można jakoś podać dane do konwertera bez używania printa.

Ewentualnie może coś jeszcze innego odpowiada za znak nowej linii. Bo przecież dane podawane do konwertera nie są nigdzie wypisywane, tak jak w terminalu, więc skąd tam i po co znak nowej linii? Terminal wstawia znak nowej linii po każdym wywołaniu pewnie po to, żeby to było czytelne. Ale, czy terminal może wstawiać znak nowej linii do konwertera, po każdorazowej iteracji mojego programu? Może by to zrobić jakoś inaczej, niż przez terminal. A może łatwiej będzie napisać od podstaw program w C++.

W 200 GB pliku w formacie .data pierwsze znaki wypisuje mi jako:

1011110111101101110000110011110000011011000011010001000011111111100111101011000010000010010100111111111001101111000101000011101111000111101101100110000001000111010110011110100000110100011000101010101000110111001110110010110111010100001000101100111000010111100011001100111011010111101100111100101101101111010110111011011111100110110001011101100100011110011101001011111011111111111010010111111101001111000001011111000001010110111110111010001100001101100010100111110001010001100111111101111100010011011101111001010100110111111011001011001000110111100001010101111100000001101010101111110001010010111110100100100110001001101100101011000000111100111010100000001000011101001001100010110101110000010111101001001101111110101010110101110010111000100101101101111011010100010011101001010100011010010011001000100110100101011111000000011000111110101001011110001011000001110001010000011000110001111101101001111101111010111111000110110110110100111110001000001001110001001011111001000001010010010110011000001101001000

Bez żadnych nowych linii. Po uruchomieniu cat mojplik.data | ./Konwerter.exe | ./RNG_test stdin

Nadal dostaję "debug error", "abort() has been called" oraz pełno faili:

 [Low1/32]BCFN(2+3,13-8,T)         R=+583.2  p =  6.0e-149   FAIL !!!!!
  [Low1/32]BCFN(2+4,13-8,T)         R=+546.4  p =  1.3e-139   FAIL !!!!!
  [Low1/32]BCFN(2+5,13-9,T)         R=+621.0  p =  1.2e-140   FAIL !!!!!
  [Low1/32]BCFN(2+6,13-9,T)         R=+647.6  p =  1.2e-146   FAIL !!!!!
  [Low1/32]DC6-9x1Bytes-1           R= +54.5  p =  3.5e-31    FAIL !!!
  [Low1/32]FPF-14+6/16:(0,14-4)     R= +14.9  p =  4.0e-12   VERY SUSPICIOUS
  [Low1/32]FPF-14+6/16:(1,14-5)     R=  +8.1  p =  1.3e-6   mildly suspicious
  [Low1/32]FPF-14+6/16:all          R= +19.0  p =  8.5e-16    FAIL !
  [Low1/32]FPF-14+6/16:all2         R= +54.4  p =  1.8e-18    FAIL !
  [Low1/32]FPF-14+6/16:cross        R= +33.2  p =  6.6e-26    FAIL !!
  ...and 55 test result(s) without anomalies

Swoją drogą to co zwraca funkcja bin() i jest zapisywane do pliku to string, więc pewnie jest w formacie ASCII.
 
Re: Jak zrobić test za pomocą PractRand?
#217518
Author: M.M.
Date: Sun, 22 Aug 2021 08:39
31 lines
6111 bytes
On Sunday, August 22, 2021 at 5:08:38 AM UTC+2, osobli...@gmail.com wrote:
> Jednak tego raczej nie przeskoczę. Print zawsze będzie wypisywał liczbę linijka po linijce i będzie się tam prawdopodobnie pojawiać znak nowej linii, pomimo, że ja go nie wstawiam. Nie będzie się pojawiać tylko podczas zapisu do pliku funkcją write. A wywołanie funkcji bez printa ani write nic nie zrobi i nie poda nigdzie żadnych liczb. Chyba, że można jakoś podać dane do konwertera bez używania printa. 
> 
> Ewentualnie może coś jeszcze innego odpowiada za znak nowej linii. Bo przecież dane podawane do konwertera nie są nigdzie wypisywane, tak jak w terminalu, więc skąd tam i po co znak nowej linii? Terminal wstawia znak nowej linii po każdym wywołaniu pewnie po to, żeby to było czytelne. Ale, czy terminal może wstawiać znak nowej linii do konwertera, po każdorazowej iteracji mojego programu? Może by to zrobić jakoś inaczej, niż przez terminal. A może łatwiej będzie napisać od podstaw program w C++. 
> 
> W 200 GB pliku w formacie .data pierwsze znaki wypisuje mi jako: 
> 
> 1011110111101101110000110011110000011011000011010001000011111111100111101011000010000010010100111111111001101111000101000011101111000111101101100110000001000111010110011110100000110100011000101010101000110111001110110010110111010100001000101100111000010111100011001100111011010111101100111100101101101111010110111011011111100110110001011101100100011110011101001011111011111111111010010111111101001111000001011111000001010110111110111010001100001101100010100111110001010001100111111101111100010011011101111001010100110111111011001011001000110111100001010101111100000001101010101111110001010010111110100100100110001001101100101011000000111100111010100000001000011101001001100010110101110000010111101001001101111110101010110101110010111000100101101101111011010100010011101001010100011010010011001000100110100101011111000000011000111110101001011110001011000001110001010000011000110001111101101001111101111010111111000110110110110100111110001000001001110001001011111001000001010010010110011000001101001000 
> 
> Bez żadnych nowych linii. Po uruchomieniu cat mojplik.data | ./Konwerter.exe | ./RNG_test stdin 
> 
> Nadal dostaję "debug error", "abort() has been called" oraz pełno faili: 

Może tam znajdziesz odpowiedź:
https://www.techiedelight.com/how-to-convert-an-integer-to-a-binary-string-in-python/
https://stackoverflow.com/questions/493386/how-to-print-without-a-newline-or-space

> 
> [Low1/32]BCFN(2+3,13-8,T) R=+583.2 p = 6.0e-149 FAIL !!!!! 
> [Low1/32]BCFN(2+4,13-8,T) R=+546.4 p = 1.3e-139 FAIL !!!!! 
> [Low1/32]BCFN(2+5,13-9,T) R=+621.0 p = 1.2e-140 FAIL !!!!! 
> [Low1/32]BCFN(2+6,13-9,T) R=+647.6 p = 1.2e-146 FAIL !!!!! 
> [Low1/32]DC6-9x1Bytes-1 R= +54.5 p = 3.5e-31 FAIL !!! 
> [Low1/32]FPF-14+6/16:(0,14-4) R= +14.9 p = 4.0e-12 VERY SUSPICIOUS 
> [Low1/32]FPF-14+6/16:(1,14-5) R= +8.1 p = 1.3e-6 mildly suspicious 
> [Low1/32]FPF-14+6/16:all R= +19.0 p = 8.5e-16 FAIL ! 
> [Low1/32]FPF-14+6/16:all2 R= +54.4 p = 1.8e-18 FAIL ! 
> [Low1/32]FPF-14+6/16:cross R= +33.2 p = 6.6e-26 FAIL !! 
> ...and 55 test result(s) without anomalies 
> 
> Swoją drogą to co zwraca funkcja bin() i jest zapisywane do pliku to string, więc pewnie jest w formacie ASCII.
Re: Jak zrobić test za pomocą PractRand?
#217519
Author: osobli...
Date: Sun, 22 Aug 2021 12:01
20 lines
5894 bytes
niedziela, 22 sierpnia 2021 o 10:39:55 UTC+2 M.M. napisał(a):
> On Sunday, August 22, 2021 at 5:08:38 AM UTC+2, osobli...@gmail.com wrote: 
> > Jednak tego raczej nie przeskoczę. Print zawsze będzie wypisywał liczbę linijka po linijce i będzie się tam prawdopodobnie pojawiać znak nowej linii, pomimo, że ja go nie wstawiam. Nie będzie się pojawiać tylko podczas zapisu do pliku funkcją write. A wywołanie funkcji bez printa ani write nic nie zrobi i nie poda nigdzie żadnych liczb. Chyba, że można jakoś podać dane do konwertera bez używania printa. 
> > 
> > Ewentualnie może coś jeszcze innego odpowiada za znak nowej linii. Bo przecież dane podawane do konwertera nie są nigdzie wypisywane, tak jak w terminalu, więc skąd tam i po co znak nowej linii? Terminal wstawia znak nowej linii po każdym wywołaniu pewnie po to, żeby to było czytelne. Ale, czy terminal może wstawiać znak nowej linii do konwertera, po każdorazowej iteracji mojego programu? Może by to zrobić jakoś inaczej, niż przez terminal. A może łatwiej będzie napisać od podstaw program w C++. 
> > 
> > W 200 GB pliku w formacie .data pierwsze znaki wypisuje mi jako: 
> > 
> > 1011110111101101110000110011110000011011000011010001000011111111100111101011000010000010010100111111111001101111000101000011101111000111101101100110000001000111010110011110100000110100011000101010101000110111001110110010110111010100001000101100111000010111100011001100111011010111101100111100101101101111010110111011011111100110110001011101100100011110011101001011111011111111111010010111111101001111000001011111000001010110111110111010001100001101100010100111110001010001100111111101111100010011011101111001010100110111111011001011001000110111100001010101111100000001101010101111110001010010111110100100100110001001101100101011000000111100111010100000001000011101001001100010110101110000010111101001001101111110101010110101110010111000100101101101111011010100010011101001010100011010010011001000100110100101011111000000011000111110101001011110001011000001110001010000011000110001111101101001111101111010111111000110110110110100111110001000001001110001001011111001000001010010010110011000001101001000 
> > 
> > Bez żadnych nowych linii. Po uruchomieniu cat mojplik.data | ./Konwerter.exe | ./RNG_test stdin 
> > 
> > Nadal dostaję "debug error", "abort() has been called" oraz pełno faili:
> Może tam znajdziesz odpowiedź: 
> https://www.techiedelight.com/how-to-convert-an-integer-to-a-binary-string-in-python/ 
> https://stackoverflow.com/questions/493386/how-to-print-without-a-newline-or-space

Udało mi się uzupełnić zera w zapisie binarnym i usunąć nowe linie podczas wywoływania print. Bez konwertera mam nadal dużo faili (bez błędu), z konwerterem nawet kilka faili więcej i nadal wywala błąd abort().

Wciąż prawdopodobnie jest problem w tym, że funkcje konwersji na format binarny "converting an integer to a binary string". I mam tam stringi, czyli zera i jedynki z formacie ASCII.
Re: Jak zrobić test za pomocą PractRand?
#217520
Author: osobli...
Date: Sun, 22 Aug 2021 13:08
1 lines
3388 bytes
Mam jeszcze taki pomysł, żeby przekonwertować moje liczby pseudolosowe na znaki ASCII, a nie jak dotychczas tylko na szczególne znaki ASCII w postaci samych zer i jedynek. Wtedy będę miał strumień losowych znaków ASCII. Następnie te znaki można przekonwertować na bity, jeżeli znajdzie się taki sposób.
Re: Jak zrobić test za pomocą PractRand?
#217521
Author: M.M.
Date: Sun, 22 Aug 2021 16:41
4 lines
3638 bytes
On Sunday, August 22, 2021 at 3:08:25 PM UTC+2, osobli...@gmail.com wrote:
> Mam jeszcze taki pomysł, żeby przekonwertować moje liczby pseudolosowe na znaki ASCII, a nie jak dotychczas tylko na szczególne znaki ASCII w postaci samych zer i jedynek. Wtedy będę miał strumień losowych znaków ASCII. Następnie te znaki można przekonwertować na bity, jeżeli znajdzie się taki sposób.

A jakby tak jeszcze skompresować zipem?
Re: Jak zrobić test za pomocą PractRand?
#217522
Author: osobli...
Date: Sun, 22 Aug 2021 18:59
41 lines
5842 bytes
niedziela, 22 sierpnia 2021 o 18:41:50 UTC+2 M.M. napisał(a):
> On Sunday, August 22, 2021 at 3:08:25 PM UTC+2, osobli...@gmail.com wrote: 
> > Mam jeszcze taki pomysł, żeby przekonwertować moje liczby pseudolosowe na znaki ASCII, a nie jak dotychczas tylko na szczególne znaki ASCII w postaci samych zer i jedynek. Wtedy będę miał strumień losowych znaków ASCII. Następnie te znaki można przekonwertować na bity, jeżeli znajdzie się taki sposób.
> A jakby tak jeszcze skompresować zipem?

W jakim celu ta kompresja?

Po wygenerowaniu danych do pliku data i wrzuceniu w konwerter terminal wyrzuca krzaki:

nUI?U      9;?AXe@"^Kev6*mڗqdp<1o{        mg}5H&'X%p_TflY~pVjkOKr}zo1FleFc?ybq8\NVd:4[ւz~9ueVtlڔ:ą@T>N6@r(fo郳g41)n$ѤJIM 6hc%xӺj]k<g(<3+3.=<Ymf~;PP|ƵW%-vu'`oKn2#Qegor"a+Ma%v|/ցtrz>l pҞ%l?+uLA{UK˜N%dVeT^~ۗXwUjFxr{`qk��:l}g]<A\8$4D"6@X{gijf$un)ucuفrySnsNhg㸚2\ĥpByWh*@Ἶ��NxoLlQԟzFD4Ĭ.g`4n[C!4*<>:_.v?$]9P;ўfPa?WGQ@jsnNL4>5q2G[D材Z{NE!>c`+>XGv[۽*1&
;9N)xj9ɓL`=h]eƉ{��$P.ͶZiY|FکUU+Nvwn#^R@؆Y0 e*u4l9zMjGICמ,
]i<Jq(ܖ4ʺhJXztf-h:[^T:,Cڬ4@8~nXI:R&sSceNC`<+=~w<S#w}SǟM^O4˪EMƞiq-"ElA<eX
ӔbeK94a}Բ6A*

Czyli wygląda na to, że działa poprawnie. Te same pliki, gdy są mniejsze niż około 1 GB skutkują nierozpoczęciem się testów i komunikatem:

RNG_test using PractRand version 0.93
RNG = RNG_stdin, seed = 0xae0bb968
test set = normal, folding = standard(unknown format)

Segmentation fault (core dumped)

Dla większych niż 1 GB otrzymuję wciąż dużo faili i standardowy komunikat "abort()":

RNG_test using PractRand version 0.93
RNG = RNG_stdin, seed = 0x9c049a18
test set = normal, folding = standard(unknown format)

rng=RNG_stdin, seed=0x9c049a18
length= 32 megabytes (2^25 bytes), time= 3.1 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-4,T)                  R= +85.2  p =  3.7e-37    FAIL !!!
  BCFN(2+1,13-4,T)                  R= +77.8  p =  6.2e-34    FAIL !!!
  BCFN(2+2,13-5,T)                  R= +79.5  p =  2.6e-31    FAIL !!!
  BCFN(2+3,13-5,T)                  R= +83.6  p =  6.3e-33    FAIL !!!
  BCFN(2+4,13-5,T)                  R= +80.2  p =  1.4e-31    FAIL !!!
  BCFN(2+5,13-6,T)                  R= +99.5  p =  1.6e-34    FAIL !!!
  BCFN(2+6,13-6,T)                  R=+102.2  p =  1.9e-35    FAIL !!!
  BCFN(2+7,13-7,T)                  R=+121.8  p =  2.9e-37    FAIL !!!

Spróbuję jeszcze raz wygenerować plik 200 GB. Dlaczego wielkość pliku robi różnicę?
Re: Jak zrobić test za pomocą PractRand?
#217523
Author: M.M.
Date: Sun, 22 Aug 2021 20:06
79 lines
7759 bytes
On Sunday, August 22, 2021 at 8:59:10 PM UTC+2, osobli...@gmail.com wrote:
> niedziela, 22 sierpnia 2021 o 18:41:50 UTC+2 M.M. napisał(a): 
> > On Sunday, August 22, 2021 at 3:08:25 PM UTC+2, osobli...@gmail.com wrote: 
> > > Mam jeszcze taki pomysł, żeby przekonwertować moje liczby pseudolosowe na znaki ASCII, a nie jak dotychczas tylko na szczególne znaki ASCII w postaci samych zer i jedynek. Wtedy będę miał strumień losowych znaków ASCII. Następnie te znaki można przekonwertować na bity, jeżeli znajdzie się taki sposób. 
> > A jakby tak jeszcze skompresować zipem?
> W jakim celu ta kompresja? 

Potem wystarczy zdekompresować i można testować - żartowałem odnośnie tylu zmian
formatu. Myślałem że po prostu masz coś gotowego co daje zera i jedynki w formacie
ASCII - napisałem więc dla Ciebie konwerter do formatu binarnego który jest zgodny z 
formatem PractRand. Wielokrotne zmiany z formatu do formatu nie mają sensu, jeśli
 możesz to wypisuj od razu binarnie dla PractRand. 

> Po wygenerowaniu danych do pliku data i wrzuceniu w konwerter terminal wyrzuca krzaki: 
> 
> n U I?U 9;?AXe@"^Kev6*mڗqdp<1 o{ mg }5 H&' X %p_Tfl Y~ pVjkOK r }zo1Fle F c?ybq8\N V d:4[ւz~ 9ueVtlڔ:ą@T>N6@r(fo郳g41)n$ѤJIM 6hc %xӺj ]k<g(<3 +3. =<Y mf~; PP|Ƶ W%-vu' ` oKn2#Qegor"a + Ma%v |/ցtr z> l pҞ% l?+uLA{U K˜N%dV eT^ ~ ۗXwUjF xr{`qk�� :l }g]<A\8 $4D "6@ X{g ijf$un)u cuفry SnsNhg㸚2\ĥ pBy W h*@Ἶ��NxoLl QԟzFD4Ĭ.g`4n[C!4 *<>: _.v?$]9P ; ўfPa? WGQ@js n NL4>5q2G[D 材Z{NE!>c` + > XGv [۽*1& 
> ;9N) x j9ɓL` =h]eƉ{�� $P.ͶZi Y| FکUU+Nvwn# ^R@؆Y0 e*u4 l9zMj GICמ, 
> ]i<Jq(ܖ4 ʺhJXzt f-h:[^T:,Cڬ4@8~nXI: R&sSceN C `<+=~ w <S#w}SǟM^ O4˪EMƞiq- "ElA<eX 
> ӔbeK94a}Բ6A* 

> 
> Czyli wygląda na to, że działa poprawnie. 
Nie wiem, ale u mnie prosty generator wraz z tym konwerterem przechodzi kilkugodzinne testy.

> Te same pliki, gdy są mniejsze niż około 1 GB skutkują nierozpoczęciem się testów i komunikatem:
> RNG_test using PractRand version 0.93
> RNG = RNG_stdin, seed = 0xae0bb968
> test set = normal, folding = standard(unknown format)
> Segmentation fault (core dumped) 

Nie wiem dlaczego, czy używasz komendy:
cat plik.bin | PractRand stdin
?

> Dla większych niż 1 GB otrzymuję wciąż dużo faili i standardowy komunikat "abort()":

Powinno działać dla dowolnie dużych danych przy pomocy komendy:
Generator | Konwerter | Tester

Ale jak Tester przestanie czytać po failach, to konwerter nie może pisać i robi abort.
Może spróbuj wersji która nie robi abort gdy nie może pisać:
https://github.com/mmarszik/01ToBin/blob/main/main.cpp

Nie wiem gdzie jakiej komendy używasz.


> RNG_test using PractRand version 0.93
> RNG = RNG_stdin, seed = 0x9c049a18
> test set = normal, folding = standard(unknown format)
> rng=RNG_stdin, seed=0x9c049a18 
> length= 32 megabytes (2^25 bytes), time= 3.1 seconds

Zwórć uwagę, że 2^25 to dużo mniej niż 1GB, a już był jakiś abort, nie
wiem jaki program daje abort, bo używasz trzech programów. Jeśli
konwerter daje abort, to spróbuj powyższej wersji.

> Test Name Raw Processed Evaluation
> BCFN(2+0,13-4,T) R= +85.2 p = 3.7e-37 FAIL !!! 
> BCFN(2+1,13-4,T) R= +77.8 p = 6.2e-34 FAIL !!! 
> BCFN(2+2,13-5,T) R= +79.5 p = 2.6e-31 FAIL !!! 
> BCFN(2+3,13-5,T) R= +83.6 p = 6.3e-33 FAIL !!! 
> BCFN(2+4,13-5,T) R= +80.2 p = 1.4e-31 FAIL !!! 
> BCFN(2+5,13-6,T) R= +99.5 p = 1.6e-34 FAIL !!! 
> BCFN(2+6,13-6,T) R=+102.2 p = 1.9e-35 FAIL !!! 
> BCFN(2+7,13-7,T) R=+121.8 p = 2.9e-37 FAIL !!! 
> 
> Spróbuję jeszcze raz wygenerować plik 200 GB. Dlaczego wielkość pliku robi różnicę?

Nie wiem, ale powinno działać bez pośrednictwa pliku dyskowego. U mnie działa kilka
godzin i nie ma faili ani abortów. Może jakaś wersja PractRand nie kompiluje się poprawnie 
jakimś kompilatorem, albo nie działa pod jakimś systemem? Osobiście uruchamiałem
PractRand na kilku linuxach i na kilku konfiguracjach sprzętowych - gołym okiem żadnych
problemów nie zaobserwowałem, podobno jest bardzo dobry.

Jeśli generator liczb losowych jest dobry, a PractRand zgłasza faile, to może być spowodowane
ucinaniem zer wiodących - jeśli nie usunąłeś nadal tego problemu. Tam w linkach pokazywali jak w
pythonie zachowuje się zera wiodące. Jeśli konwerter działa, to znaczy nie ma już znaków LF 0xa.

Pozdrawiam
Re: Jak zrobić test za pomocą PractRand?
#217524
Author: osobli...
Date: Sun, 22 Aug 2021 20:17
37 lines
5101 bytes
> > Te same pliki, gdy są mniejsze niż około 1 GB skutkują nierozpoczęciem się testów i komunikatem: 
> > RNG_test using PractRand version 0.93 
> > RNG = RNG_stdin, seed = 0xae0bb968 
> > test set = normal, folding = standard(unknown format) 
> > Segmentation fault (core dumped)
> Nie wiem dlaczego, czy używasz komendy: 
> cat plik.bin | PractRand stdin 
> ?

Tak:

cat plik.data | konwerter.exe | RNG_test stdin

> > Dla większych niż 1 GB otrzymuję wciąż dużo faili i standardowy komunikat "abort()":
> Powinno działać dla dowolnie dużych danych przy pomocy komendy: 
> Generator | Konwerter | Tester 
> 
> Ale jak Tester przestanie czytać po failach, to konwerter nie może pisać i robi abort. 

Możliwe, że tak jest. Tylko skąd te faile? Ostatni raz testuję mój program i mój plik. Jeżeli nie zda testów, napiszę inny prosty, sprawdzony generator.

> Może spróbuj wersji która nie robi abort gdy nie może pisać: 
> https://github.com/mmarszik/01ToBin/blob/main/main.cpp 

Ok.

> > Spróbuję jeszcze raz wygenerować plik 200 GB. Dlaczego wielkość pliku robi różnicę?
> Nie wiem, ale powinno działać bez pośrednictwa pliku dyskowego. U mnie działa kilka 
> godzin i nie ma faili ani abortów. Może jakaś wersja PractRand nie kompiluje się poprawnie 
> jakimś kompilatorem, albo nie działa pod jakimś systemem? 

Jeżeli nawet plik znowu nie zda testów, spróbuję napisać inny, sprawdzony generator. Jeżeli on też nie zda, to coś jest nie tak z tym PractRand.

> Jeśli generator liczb losowych jest dobry, a PractRand zgłasza faile, to może być spowodowane 
> ucinaniem zer wiodących - jeśli nie usunąłeś nadal tego problemu. 

To już rozwiązane, znaki nowych linii także.
Re: Jak zrobić test za pomocą PractRand?
#217525
Author: M.M.
Date: Sun, 22 Aug 2021 20:58
33 lines
5463 bytes
On Sunday, August 22, 2021 at 10:17:49 PM UTC+2, osobli...@gmail.com wrote:
> > > Te same pliki, gdy są mniejsze niż około 1 GB skutkują nierozpoczęciem się testów i komunikatem: 
> > > RNG_test using PractRand version 0.93 
> > > RNG = RNG_stdin, seed = 0xae0bb968 
> > > test set = normal, folding = standard(unknown format) 
> > > Segmentation fault (core dumped) 
> > Nie wiem dlaczego, czy używasz komendy: 
> > cat plik.bin | PractRand stdin 
> > ?
> Tak: 
> 
> cat plik.data | konwerter.exe | RNG_test stdin
> > > Dla większych niż 1 GB otrzymuję wciąż dużo faili i standardowy komunikat "abort()": 
> > Powinno działać dla dowolnie dużych danych przy pomocy komendy: 
> > Generator | Konwerter | Tester 
> > 
> > Ale jak Tester przestanie czytać po failach, to konwerter nie może pisać i robi abort.
> Możliwe, że tak jest. Tylko skąd te faile? Ostatni raz testuję mój program i mój plik. Jeżeli nie zda testów, napiszę inny prosty, sprawdzony generator.

Tak, jeśli użyjesz generatora który przechodzi testy PractRand, a teraz będą faile, to błąd będzie 
gdzieś w komunikacji lub konwersji. 

> > Może spróbuj wersji która nie robi abort gdy nie może pisać: 
> > https://github.com/mmarszik/01ToBin/blob/main/main.cpp
> Ok.
> > > Spróbuję jeszcze raz wygenerować plik 200 GB. Dlaczego wielkość pliku robi różnicę? 
> > Nie wiem, ale powinno działać bez pośrednictwa pliku dyskowego. U mnie działa kilka 
> > godzin i nie ma faili ani abortów. Może jakaś wersja PractRand nie kompiluje się poprawnie 
> > jakimś kompilatorem, albo nie działa pod jakimś systemem?
> Jeżeli nawet plik znowu nie zda testów, spróbuję napisać inny, sprawdzony generator. Jeżeli on też nie zda, to coś jest nie tak z tym PractRand.
> > Jeśli generator liczb losowych jest dobry, a PractRand zgłasza faile, to może być spowodowane 
> > ucinaniem zer wiodących - jeśli nie usunąłeś nadal tego problemu.
> To już rozwiązane, znaki nowych linii także.
Re: Jak zrobić test za pomocą PractRand?
#217526
Author: osobli...
Date: Sun, 22 Aug 2021 21:28
13 lines
3872 bytes
Z nowym plikiem i z nowym konwerterem znowu mam pełno faili. Napisałem generator:

x=440298129029124338965764381130484736423

key1 = 47026247687942121848144207491837523525
key2 = 83866140218348733064738400095399246195

def LCG(x,key1,key2):
    x=(x * key1 + key2) & 340282366920938463463374607431768211455
    x = x >> 96
    return x

Nie wiem, czy stałe są dobrze dobrane, ale chyba powinno być ok. Zaraz go przetestuję.
Page 1 of 2 • 100 total messages
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads