eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak zrobić test za pomocą PractRand?Re: Jak zrobić test za pomocą PractRand?
  • Data: 2021-08-23 15:05:26
    Temat: Re: Jak zrobić test za pomocą PractRand?
    Od: "M.M." <m...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On Monday, August 23, 2021 at 2:31:39 PM UTC+2, o...@g...com wrote:
    > poniedziałek, 23 sierpnia 2021 o 11:18:03 UTC+2 M.M. napisał(a):
    > > On Monday, August 23, 2021 at 5:23:14 AM UTC+2, o...@g...com wrote:
    > > > Właściwie to mój generator oblewa po 16 MB:
    > > >
    > > > length= 16 megabytes (2^24 bytes), time= 2.1 seconds
    > > >
    > > > A ten LCG oblewa po 2 MB:
    > > >
    > > > length= 2 megabytes (2^21 bytes), time= 3.3 seconds
    > > >
    > > > Czyli mój radzi sobie chyba lepiej. O ile to ma w ogóle jakiekolwiek znaczenie,
    skoro testy prawdopodobnie nie są wykonywane poprawnie. Raczej wróżenie z fusów.
    > > Jeśli użyłeś tego samego generatora co ja, tych samych stałych A i B, jeśli
    zainicjowałeś x=1, jeśli odrzuciłeś sto
    > > początkowych wygenerowanych liczb (500 bitów), jeśli bierzesz tylko 5
    najstarszych bitów - to powinno być tak samo jak
    > > u mnie... chociaż ja mam wersję PractRanda 0.94 a Ty 0.93 - nie wiem czy zostało
    zmienione coś na tyle
    > > istotnego aby wyniki testów były całkiem inne. Raczej w nowszej wersji testy
    powinny być bardziej surowe.
    > >
    > > Moje początkowe 1000 bitów wygląda tak:
    > > ./SimpPRNG 1 1000
    > > 1100010111000111110000011110101111001001011010001110
    0011110011110000000011111001000101101111111000001111
    1110100100110000011011001100101110100010010011011101
    1111001010111011011101001101100110001001111000101011
    0000010000011101011010011111101111110000010110010111
    1110001010100101000000010111111000011001001110011110
    1011010111110000100101100110100001110100000110101010
    0011000100000110001111011100011100111110001011011101
    0011001011001101100000100110110001101101111110010100
    0010110101110111011010111111100001101101011101011011
    1000001000011100100111000100011011000111100110001000
    1001101100110001010001001111001110100101001000001101
    0101000101111100100101110010011000001000001101101100
    1101011100001010110100111101011010001000101100000001
    0100111111010111001100111000111011001111001110101110
    1000001001001001100100111110111110110000110010101011
    0110011000101000101110000100101001001000000111010101
    0100110100101110101111000100011100000000011000000010
    1110000010110100110111011000100010101110000010010011
    001101000101
    > >
    > > Wyświetlam z tych 5 bitów począwszy od najmłodszego:
    > >
    > > https://github.com/mmarszik/SimpPRNG/blob/main/main.
    cpp
    > > type_out v = r();
    > > for( int k=0 ; k<bits && j<BUFF_SIZE && i<size ; k++, j++, i++ ) {
    > > buff[j] = '0' + (v & 1);
    > > v >>= 1;
    > > }
    > >
    > > Ale na jakość generatora i zaliczenie testów nie powinno wpłynąć wyświetlanie od
    najstarszego.
    > >
    > > Początkowe liczby z tego generatora są statystycznie bardzo słabe jeśli inicjuje
    się małą liczbą
    > > (np. jedynką), jest dużo zer na początku, warto odrzucić np. 100 początkowych
    generowań.
    > >
    > > Pozdrawiam
    > Mam inne wyniki. Oto wyniki w formacie dziesiętnym:
    >
    > x = 1
    >
    > x = (x * 79908886691 + 8143076871913) & 340282366920938463463374607431768211455 =
    8222985758604
    >
    > 8222985758604 >> 123 = 0
    >
    > x = (8222985758604 * 79908886691 + 8143076871913) &
    340282366920938463463374607431768211455 = 657089637254136791211277
    >
    > 657089637254136791211277 >> 123 = 0
    >
    > x = (657089637254136791211277 * 79908886691 + 8143076871913) &
    340282366920938463463374607431768211455 = 52507301369171109219924401511286320
    >
    > 52507301369171109219924401511286320 >> 123 = 0
    >
    > x = (52507301369171109219924401511286320 * 79908886691 + 8143076871913) &
    340282366920938463463374607431768211455 = 333442790507095493699328894974793383801
    >
    > 333442790507095493699328894974793383801 >> 123 = 31
    >
    > x = (333442790507095493699328894974793383801 * 79908886691 + 8143076871913) &
    340282366920938463463374607431768211455 = 225174366013576153541971350915313012980
    >
    > 225174366013576153541971350915313012980 >> 123 = 21
    >
    > Czyli uzyskuję:
    >
    > 0
    > 0
    > 0
    > 31
    > 21
    >
    > I tak dalej. Jak mogą tu wychodzić inne wyniki?

    Jeśli nie ma błędów, to w tym przypadku nie można uzyskać innych wyników. Jeśli nie
    pomijam 100 początkowych
    wygenerowanych liczb, to mam takie same liczby jak Ty:

    0
    0
    0
    31
    21
    4
    3
    9
    9
    7
    25
    12
    15
    16
    24
    11
    20
    14
    25
    27

    Jeśli pomijam to mam takie:

    3
    29
    24
    7
    24
    11
    15
    18
    22
    24
    17
    7
    15
    0
    28
    19
    8
    27
    31
    0

    W wielu generatorach początkowe liczby uznawane są za kiepskie. Jeśli to jest ważne,
    pomija
    się wiele początkowych liczb. Ten generator jest tylko do minimalnego sprawdzenia,
    ale jakoś
    odruchowo pominąłem chociaż 100 początkowych liczb. Generalnie, pobieranie co N-tego
    bitu to
    najprostsza technika zwiększająca jakość generatora - ale spowalniająca generator.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: