• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zaprogramowanie generatora liczb PCG

Mały hosting, OGROMNE możliwości
0 głosów
211 wizyt
pytanie zadane 20 maja 2021 w Python przez osobliwy nick Użytkownik (900 p.)

Cześć. Interesuje mnie zaprogramowanie generatora liczb losowych PCG o nazwie XSL-RR-RR:

https://en.wikipedia.org/wiki/Permuted_congruential_generator

Napisałem kod, który działa (i z tego co testowałem działa poprawnie):

def PCG(x):
    count1 = x >> 122
    x1 = (x ^ (x >> 64)) % (1 << 64)
    low64 = (((1 << (64 - count1)) * ((x1 % (1 << count1)) + (1 << count1))) ^ (1 << 64)) + (x1 >> count1)
    x2 = (x >> 64) % (1 << 64)
    count2 = low64 & 63
    high64 = (((1 << (64 - count2)) * ((x2 % (1 << count2)) + (1 << count2))) ^ (1 << 64)) + (x2 >> count2)
    x = (high64 << 64) | low64
    return x

Funkcja przyjmuje wynik obliczony w LCG, na przykład wynik działania x = x*12345 + 1234567 mod 2^128 i wykonuje odpowiednie kroki.

Chcę jednak wiedzieć, czy da się to zaprogramować w Pythonie szybciej? Przykładowo, żeby uciąć liczby do najbardziej znaczących 64 bitów muszę liczyć x1, gdzie używam modulo (1 << 64). Żeby obrócić bity rotr64, musiałem również napisać własną funkcję, która to robi. Czy można to rotr zrobić w Pythonie jakoś szybciej? Szukałem tego typu funkcji w numpy, ale nie znalazłem.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 172 wizyt
pytanie zadane 5 lipca 2020 w Python przez BezBarwny Użytkownik (700 p.)
0 głosów
3 odpowiedzi 1,163 wizyt
pytanie zadane 26 września 2018 w Python przez karo Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 1,509 wizyt
pytanie zadane 2 lipca 2021 w Python przez Nalesniolek Nowicjusz (180 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,261 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...