Простой ГПСЧ на базе XorShift256

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

Таким образом, можно очень просто реализовать свой вариант ГПСЧ для использования в собственных приложениях, а также встроить полностью контролируемый генератор псевдослучайных величин в свою программу.

Добавить комментарий