Генератор равномерных случайных величин по технологии полного вихревого массива
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2
101
груэнтный параметр
a
проходит все возможные значения в интервале
1,
3
N
−
c шагом
4.
±
В этом случае обращение к функции настройки выглядит как
SetA(0.0, 1.0)
.
Далее представлен программный код, позволяющий настраивать генератор
на различные значения
w
,
x0
,
a1b
,
a2e
. Конгруэнтный параметр
c
проходит все
нечетные значения из интервала
1,
1
N
−
, начиная с единицы и заканчивая
справа от
1.
N
−
Установка параметра
c
задается с помощью функции
SetC()
. Как
было показано, первое число можно задать непосредственно, а следующие чис-
ла — по константе
c
. Технология вихря на полных последовательностях все рав-
но обеспечит все неповторяющиеся числа в каждой новой последовательности.
Итак, для примера в следующей программе:
4,
w
=
2 16,
w
N
= =
1,
a1b
=
13.
a2e
=
С каждым значением
5,9,1,13
a
=
конгруэнтная константа
=
1,3,5,7,9,11,13,15.
c
Имена
P020403
и
cP020403
выбраны произвольно.
using nsDeonYuliTwist28DA; // класс вихревого генератора
namespace P020403
{ class P020403
{ static void Main(string[] args)
{ cDeonYuliTwist28DA CT = new cDeonYuliTwist28DA();
CT.SetW(4);
CT.SetA(0.0, 1.0); // полный диапазон для a
CT.SetC(0.0, 1.0); // полный диапазон для c
CT.Start();
Console.WriteLine("w = {0} N = {1}", CT.w, CT.N);
Console.WriteLine("a1b = {0} a1e = {1}",
CT.a1b, CT.a1e);
Console.WriteLine("a2b = {0} a2e = {1}",
CT.a2b, CT.a2e);
Console.WriteLine("cb = {0} ce = {1}",
CT.cb, CT.ce);
int k = 0; // номер последовательности
int NN = 0; // количество случайных величин
for (int nw = 0; nw < CT.w; nw++)
for (int nt = 0; nt < CT.N; nt++)
for (int na = 1; na <= 4; na++)
for (int nc = 1; nc <= 8; nc++)
{ Console.Write("k={0,4} | ", ++k);
for (int i = 0; i < CT.N; i++)
{ Console.Write("{0,3}", CT.Next());
NN++;
}
Console.WriteLine(" a={0,2} c ={1,2}",
CT.a, CT.c);
if (k % 250 == 0) Console.ReadKey();
}
Console.WriteLine("Finish");
Console.WriteLine("NN = {0}", NN);
Console.ReadKey();
}
}
}