В этой статье, я покажу простой рецепт для того, чтобы создать собственный генератор псевдослучайных чисел (ГПСЧ) на базе известного алгоритма 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.
Таким образом, можно очень просто реализовать свой вариант ГПСЧ для использования в собственных приложениях, а также встроить полностью контролируемый генератор псевдослучайных величин в свою программу.