arisu писал(а):
кроме: «а чего, техника быстрая, давайте бездумно тратить циклы без анализа предметной области». это, если что, АНТИрекомендация.
Так криптоаналитики как раз занимаются анализом предметной области за нас. И пытаются придумать такие генераторы, для которых нельзя отличить их вывод от случайного тестами, работающими за приемлемое время. Именно это и на самом деле хочет рядовой пользователь ГПСЧ.
Сам по себе анализ предметной области для генераторов псевдослучайных чисел - штука весьма нетривиальная. И над ней много работали такие известные учёные как Дональд Кнут и Джордж Марсалья, и находили всё новые и новые сюрпризы приятные и не очень. Что касается "бездумно тратить циклы", то опасения несколько преувеличены. У меня при попытке самостоятельно померить скорость работы ГПСЧ получилось так:
0) RANLUX++ - 3.82 cpb (старый RANLUX работал ощутимо медленнее). Генератор вполне достоен, но некриптостоек.
1) ChaCha12 при использовании AVX2 - 1.0 cpb (криптостойкий).
2) ISAAC64 - 0.9 cpb (криптостойкий, есть много памяти)
3) minstd, аналогичный ObxRandom - 2.7 cpb (игрушечный генератор).
4) вихрь Мерсенна - около 1.0 cpb (некриптостойкий, ест много памяти, проваливает отдельные тесты)
5) 128-битный линейный конгруэнтный генератор - 0.53 cpb (некриптостойкий, хороший).
6) MWC128X - 0.21 cpb (некриптостойкий, хороший). От классического MWC отличается скрэмблированием выхода.
7) sfc64 - 0.12 cpb (некриптостойкий, хороший)
8) PCG32 - 0.5 cpb (некриптостойкий, хороший)
Измерял для версий на C99, откомпилированных GCC и встроенных в цикл суммирования. cpb - это "тактов процессора на байт".
Т.е. получается, что на современных 64-битных процессорах криптостойкий ChaCha12 обгоняет minstd, 32-битный линейный конгруэнтный генератор, непригодный для реальной работы. Парадокс кажущийся:
1) ChaCha12 выдаёт сразу блок из 16 32-битных псевдослучайных чисел, и это хорошо распараллеливается с помощью SIMD и конвейера.
2) В ChaCha12 нет никаких условных переходов (а циклы легко развернуть), и это любо конвейеру процессора.
3) В ChaCha12 нет операций умножения и деления вообще.
Если же мил сердцу минимализм и не нужно ничего шифровать - то есть генераторы, в 10-30 раз обгоняющие minstd и при этом проходящие BigCrush и PractRand.
Я бы сравнил криптостойкость генератора псевдослучайных чисел как вариант по умолчанию с неотключаемыми проверками границ массива в Обероне.