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 z tego co sprawdzał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
Pytanie, czy da się to zrobić szybciej? Nie jestem zbyt dobrym programistą, napisałem swoją funkcję do rotacji bitowej, a może istnieje jakaś szybka w Pythonie? Czy to jest przyzwoicie napisany kod, czy może można to napisać prościej i szybciej? Zależy mi przede wszystkim na przyspieszeniu tego. Myślę, że ta ręcznie napisana rotacja bitowa (używana do obliczenia low64 i high64) zajmuje najwięcej czasu, gdyby istniała jakaś funkcja wbudowana w Pythonie do rotacji, można byłoby to uprościć.