Генератор равномерных случайных величин по технологии полного вихревого массива
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2
95
Console.WriteLine("Finish");
Console.ReadKey(); // просмотр результата
}
После выполнения этой программы на мониторе появляется следующий
листинг, который приведен с некоторыми сокращениями (прочерк на месте
пропущенных строк). В конце каждой строки первый дополнительный элемент
является результатом проверки, а два следующих показывают конгруэнтные
константы
a
и
c
. Общее количество каждой пачки последовательностей оцени-
вается как
w
∙
N
= 4 ∙ 16 = 64. Всего
w
∙
N
∙ 4
a
∙ 8
c
= 4 ∙ 16 ∙ 4 ∙ 8 = 2048 уникальных
последовательностей.
w = 4 N = 16
maskW = F maskU = 8
Matrix of unique sequences
k = 1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 | 0 1 1
k = 2 | 2 4 6 8 10 12 15 1 3 5 7 9 11 13 14 0 | 0 1 1
- - - - -
k = 64 | 0 9 1 10 2 11 3 12 4 13 5 14 6 15 7 8 | 0 1 1
k = 65 | 1 4 7 10 13 0 3 6 9 12 15 2 5 8 11 14 | 0 1 3
- - - - -
k = 133 | 6 11 0 5 10 15 4 9 14 3 8 13 2 7 12 1 | 0 1 5
- - - - -
k = 600 | 7 15 4 8 1 9 6 10 3 11 0 12 5 13 2 14 | 0 5 3
- - - - -
k =1025 | 1 10 11 4 5 14 15 8 9 2 3 12 13 6 7 0 | 0 9 1
- - - - -
k =2048 | 0 14 5 15 2 8 7 9 4 10 1 11 6 12 3 13 |0 13 15
Finish
Этот листинг показывает, что функция
Repeating()
не зафиксировала ни од-
ной последовательности с повторяющимися элементами из всех возможных
2048 последовательностей. Первый дополнительный элемент в каждой строке
указывает на это, поскольку содержит ноль для каждой сгенерированной после-
довательности. Другими словами, этот результат означает, что теперь можно
генерировать все уникальные последовательности, используя такой тип пара-
метра
a
. Как было указано ранее, этот результат достигается благодаря нечет-
ным значениям конгруэнтной константы
c
. Таким образом, при любых допу-
стимых значениях
a
и нечетных значениях
c
все сгенерированные случайные
последовательности уникальны.
Конструкция и результаты.
От рассмотренных в предыдущих разделах спе-
циальных аспектов перейдем к практической реализации. Далее представлено про-
странство имен
nsDeonYuliTwist28DA
, в котором класс
cDeonYuliTwist28DA
содер-
жит необходимые параметры и функции генерации. Использование класса
cDeonYuliTwist28DA
показано в следующей программе
P020401
, представленной
после этого программного кода.
namespace nsDeonYuliTwist28DA
{ class cDeonYuliTwist28DA
{ public int w = 16; // битовая длина числа
public int N = 0; // длина последовательности