Article View: pl.comp.lang.c
Article #308762Re: test randomizacyjny w C
From: bartekltg
Date: Tue, 05 Jul 2016 13:46
Date: Tue, 05 Jul 2016 13:46
120 lines
5302 bytes
5302 bytes
On 04.07.2016 21:12, Matt D. wrote: > On 7/4/2016 20:06, M.M. wrote: >> On Monday, July 4, 2016 at 5:57:17 PM UTC+2, M.M. wrote: >>> On Monday, July 4, 2016 at 3:23:47 AM UTC+2, Matt D. wrote: >>> >>>> W praktyce: Istniejace implementacje `rand` _zdecydowanie_ zawala kazde >>>> porzadne testy losowosci. >>> >>> Poprawny generator liniowy, zaimplementowany na dużym zakresie >>> powinien przejść doskonale wszystkie testy na równomierność rozkładu, >>> ponieważ >>> generuje wszystkie liczby z zakresu od 0 do N-1. Moim zdaniem problem >>> tego >>> generatora polega na tym, że przechodzi te testy zbyt dokładnie. > > Byc moze, ale... > >>> Problemy ten generator dopiero ma przy testach na zależność, bo >>> liczba losowa numer [i] zależy bezpośrednio od liczby [i-1]. >>> W ciut lepszych odmianach zależy od dwóch lub trzech poprzednich. > > ...wlasnie. I w testach losowosci w sensie ogolnym musimy miec > zaliczenie baterii (t.j., calej kolekcji) -- zawalenie jednego implikuje > zawalenie baterii. > >> Spoglądam na tę stronę z testami generatorów: >> http://www.cacert.at/cgi-bin/rngresults >> >> stdlib rand() - nie przechodzi ich testów. >> java.util.Random.Random - też nie przechodzi >> MT19337(java) nie przechodzi? czy to to jest merseen twister??? >> MersenneTwister19937 Gaussian - to na pewno MT, nie przechodzi??? >> Mersenne Twister (with some speed optimization) - prawie przeszedł, >> ale tylko 6Mbajtów na sekundę. >> >> Czy ja czegoś nie rozumiem? MT nie przechodzi testów? > > Oczywiscie -- tutaj nie ma zadnego zaskoczenia, MT zdecydowanie nie > nadaje sie do krypto --- bardziej nadaje sie do obliczen numerycznych Tu nawet nie zbliżaamy się jeszczse do kryptograficznych PRNG, te testy sprawdzają, jak dany generator sprawdza się w numeryce. > (n.p., naukowe symulacje), gdzie statystyczne wlasciwosci rozkladu sa > wazniejsze od nieprzewidywalnosci (ale tez nie jest najlepszy, to bardzo > ciezki -- duzy stan -- i powolny generator). Skąd ten mit o powolności MT? On jest równie szybki jak badziewny rand. Nie jest to jakoś super szybko, ale też trudno nazwać to wolnym generatorem. Duży stan przeszkadza przy próbie wsadzenia tego na GPU czy jeśli martwimy się o cache (jak pomiędzy losowaniami mamy dużo do roboty, to i mały stan wyleci z L1), ale najczzęścij nie jekst to problemem. MT aktualizuje jedną komurkę stanu przy jednym losowaniu, nie wszystkie. Jedynie co 623 (624?) losowania aktualizuje dodatkowo wszystkie 624 komórki. > // Dla szybkosci (numeryka, nie krypto) to raczej > http://www.agner.org/random/ Ciekawe. (Przydało by się uwspółcześnić, ale to tylko moje marudzenie, bo mi range-for nie ). Odpaliłęm i porównałem z gotowym mt z gcc. Czasy (Ranvec1(3) , mt_199937): 0.262284 0.158556 0.282353 0.158565 0.283082 0.158531 0.283313 0.158554 0.283461 0.158525 Czasy (Ranvec1(2) , mt_199937): 0.232953 0.158655 0.252857 0.158578 0.25301 0.158577 0.25347 0.158534 0.25326 0.158584 Czasy (Ranvec1(1) , mt_199937): 0.205057 0.159159 0.196595 0.159009 0.195505 0.158919 0.196932 0.158682 0.196955 0.158765 Gotowy MT_19993 (pewnie też napisany wektorowo) jest ciut szybszy dla float. Dla double jest lepiej: Czasy (Ranvec1(3) , mt_199937): 0.314738 0.433556 0.310824 0.43496 0.310764 0.434656 0.310771 0.433265 0.310793 0.434174 Ranvec1 może mieć lepsze własności, dodatkowe 25% predkośći to też nie byle co, ale zareklamowałeś to neico na wyrost. Oczywisćie, mogłem coś zwalić (http://pastebin.com/pdbaF76E) > Drastyczny przyklad dlaczego numeryki nie zawsze obchodza problemy > kryptografow -- QRNG (quasi-random number generator -- w odroznieniu od > PRNG/pseudo): > https://en.wikipedia.org/wiki/Low-discrepancy_sequence > http://www.johndcook.com/blog/2009/03/16/quasi-random-sequences-in-art-and-integration/ Nie miasząłbym w ogole QRNG i PRNG. To zupełnie inne zagadnienia, QRNG ma dość ograniczone (choć bardzo potrzebne) zastosowanie. MT i QMT to nie co tamo, tylko ze względów reklamowych nazywa się podobnie ;-) Nijak nie obniża wartości zwykłych PRNG. pzdr bartekltg
Technical Details
Message-ID:
<nlgdnf$7ol$1@node2.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<5777f44e$0$12548$65785112@news.neostrada.pl> <nlcdr5$rk4$1@portraits.wsisiz.edu.pl> <3fabf491-7526-4652-b460-a6c2b03318fe@googlegroups.com> <52620181-d1a6-4812-96a5-38eaed8f0860@googlegroups.com> <nlecfp$94i$1@portraits.wsisiz.edu.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: bartekltg <bartekltg@gmail.com> Newsgroups: pl.comp.lang.c Subject: Re: test randomizacyjny w C Date: Tue, 5 Jul 2016 15:46:22 +0200 Organization: ATMAN - ATM S.A. Lines: 121 Message-ID: <nlgdnf$7ol$1@node2.news.atman.pl> References: <5777f44e$0$12548$65785112@news.neostrada.pl> <nlcdr5$rk4$1@portraits.wsisiz.edu.pl> <3fabf491-7526-4652-b460-a6c2b03318fe@googlegroups.com> <52620181-d1a6-4812-96a5-38eaed8f0860@googlegroups.com> <nlecfp$94i$1@portraits.wsisiz.edu.pl> NNTP-Posting-Host: 89-70-119-159.dynamic.chello.pl Mime-Version: 1.0 X-Trace: node2.news.atman.pl 1467726383 7957 89.70.119.159 (5 Jul 2016 13:46:23 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Tue, 5 Jul 2016 13:46:23 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 In-Reply-To: <nlecfp$94i$1@portraits.wsisiz.edu.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit