В этой статье, я покажу простой рецепт для того, чтобы создать собственный генератор псевдослучайных чисел (ГПСЧ) на базе известного алгоритма XorShift256.
Данный генератор потребует минимального набора операций, а также задания нескольких констант, инициализирующих ГПСЧ (параметры называются по четырем первым буквам латинского алфавита, и хранятся в виде статического массива ulong[4]). Константы для генератора надо либо подбирать эмпирически, либо брать из известных исследований или статистических проверок, но это нисколько не усложняет данный ГПСЧ, который организуется в одну функцию.
Генератор псевдослучайных чисел на базе XorShift256 вместе с кодом для тестирования выглядит примерно так:
import std.stdio; static ulong rotl(ulong x, int k) { return (x << k) | (x >> (64 - k)); } static ulong[4] s; static ulong xorShift256_next() { const(ulong) result = rotl(s[0] + s[3], 23) + s[0]; const(ulong) t = s[1] << 17; s[2] ^= s[0]; s[3] ^= s[1]; s[1] ^= s[2]; s[0] ^= s[3]; s[2] ^= t; s[3] = rotl(s[3], 45); return result; } void main() { s = [45, 8, 9, 10]; foreach (_; 0..10) { xorShift256_next.writeln; } }
Сначала, мы вкладываем в статический массив s параметры генератора, а после этого остается лишь вызвать xorShift256_next для получения очередного псевдослучайного числа, которое печатается в терминал с помощью writeln.
Таким образом, можно очень просто реализовать свой вариант ГПСЧ для использования в собственных приложениях, а также встроить полностью контролируемый генератор псевдослучайных величин в свою программу.