-
Data: 2021-09-23 02:55:30
Temat: Re: Jak zrobić test za pomocą PractRand?
Od: "o...@g...com" <o...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Bardzo szybki powinien też być ulepszony przeze mnie PCG Melissy O'Neil o nazwie
XSL-RR-RR (128-bitowy, choć można stworzyć też wersje 64-bitowe i 32-bitowe):
https://en.wikipedia.org/wiki/Permuted_congruential_
generator
Normalnie oblewa on dosyć szybko testy PractRand (kod w Pythonie, sam mixer pewnie
można napisać lepiej w C, może jako jakieś macro):
import struct
import sys
x = 83866140117348733064738400095399246193
#seed
def PCGmixer(x):
count1 = x >> 122
x1 = (x ^ (x >> 64)) & 18446744073709551615
low64 = (x1 >> count1) | (x1 << (64 - count1)) & 18446744073709551615
x2 = (x >> 64) & 18446744073709551615
count2 = low64 & 63
high64 = (x2 >> count2) | (x2 << (64 - count2)) & 18446744073709551615
x = (high64 << 64) | low64
return x
def LCG(x):
x = (x * 47026247687942121848144207491837523525 +
83866140218348733064834828227924511723) & 340282366920938463463374607431768211455
return x
while 1 == 1:
x=LCG(x)
w=PCGmixer(x)
split = [(w >> x) & 0xFFFFFFFF for x in reversed(range(0, 128, 32))]
binary = struct.pack('IIII', split[0], split[1], split[2], split[3])
sys.stdout.buffer.write(binary)
Ale wystarczy dodać xorowanie kolejnych wyników:
import struct
import sys
x = 83866140117348733064738400095399246193
def PCGmixer(x):
count1 = x >> 122
x1 = (x ^ (x >> 64)) & 18446744073709551615
low64 = (x1 >> count1) | (x1 << (64 - count1)) & 18446744073709551615
x2 = (x >> 64) & 18446744073709551615
count2 = low64 & 63
high64 = (x2 >> count2) | (x2 << (64 - count2)) & 18446744073709551615
x = (high64 << 64) | low64
return x
def LCG(x):
x = (x * 47026247687942121848144207491837523525 +
83866140218348733064834828227924511723) & 340282366920938463463374607431768211455
return x
w=0
while 1 == 1:
w_1 = w
x=LCG(x)
w=PCGmixer(x)
w_2 = w_1 ^ w
#split = [(w_2 >> x) & 0xFFFFFFFF for x in reversed(range(0, 128, 32))]
#binary = struct.pack('IIII', split[0], split[1], split[2], split[3])
#sys.stdout.buffer.write(binary)
Żeby zdawał on testy. Oczywiście sam PCGmixer wydłuża czas pracy istotnie (względem
bazowego LCG), ale pewnie można go wykonywać szybciej.
Następne wpisy z tego wątku
- 16.06.23 13:32 o...@g...com
- 16.06.23 14:05 o...@g...com
- 16.06.23 14:07 o...@g...com
- 16.06.23 14:11 o...@g...com
- 21.06.23 05:48 o...@g...com
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-18 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-18 Gliwice => IT Expert (Network Systems area) <=
- 2024-12-18 Wrocław => Application Security Engineer <=
- 2024-12-18 Warszawa => Key Account Manager <=
- 2024-12-18 Alternatywny nośnik do monitoringu zamiast HDD?
- 2024-12-17 Rodzaj przekładni planetarnej z
- 2024-12-17 Z instrukcji do kitu
- 2024-12-17 Re: W telefonie brak szufladki na drugą kartę SIM
- 2024-12-17 nie wyrzucaj starych opon
- 2024-12-17 znów elektryk:P
- 2024-12-17 "Ręczny" a przegląd.
- 2024-12-17 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-12-17 Warszawa => Fullstack Developer <=
- 2024-12-17 Warszawa => Starszy Konsultant AWS <=
- 2024-12-17 Kraków => Full Stack .Net Engineer <=