А.Ф. Деон, Ю.А. Меняев
96
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2
public int N1 = 0; // максимальное число
int[] x; // конгруэнтно-вихревая последовательность
public int x0 = 1; // начало последовательности
public double abf = 0.39; // относительное начало a
public double aef = 0.39; // относительное окончание a
public int a1b = 1, a1e = 0; // интервал a1
int a1s = 0; // состояние интервала a1
public int a2b = 1, a2e = 0; // интервал a2
int a2s = 0; // состояние интервала a2
int a1 = 5; // константа для интервала a1
int a2 = 5; // константа для интервала a2
int nA = 1; // номер константы a1 или a2
public int a = 5; // текущее значение константы a
public double cbf = 0.1; // относительное начало c
public double cef = 0.9; // относительное окончание c
public int cb = 1, ce = 0; // интервал c
public int c = 1; // конгруэнтная константа c
public int st = 1; // состояние генератора
int nW = 0; // номер вихревого сдвига
int nT = 0; // номер вихря nT в N
int nV = 0; // номер элемента в x
uint maskW = 0U; // маска числа
uint maskU = 0U; // маска старшего бита
//---------------------------------------------------------------
public cDeonYuliTwist28DA()
{ N = 1 << w; // длина последовательности
N1 = N - 1; // максимальное число
x0 = N1 / 7; // начало генерации
}
//---------------------------------------------------------------
public int Next()
{ bool flagW = true; // вечный цикл
while (flagW) // путешествие по состояниям st
{ switch (st) // переключение по состояниям
{ case 1: // инициализация генератора
nA = 1; // генерация начинается на a1
a1s = 1; // создать вихрь 0 нa a1
a1 = a1e; // окончание интервала a1
a = a1; // текущая константа a
a2s = 0; // a2 еще не используется
a2 = a2b - 4;// левее начала интервала a2
c = cb; // начало интервала c
st = 2; // конгруэнция вихря 0
break;
case 2: // начальный вихрь 0
DeonYuli_Cong(a,c); // инициализация x
nW = 0; // номер вихревого сдвига
nT = 0; // номер вихря nT в nW
nV = 0; // номер начального значения
st = 101; // массив x подготовлен
break;
case 101: // выборка из массива x
if (nV <= N1) flagW = false;// брать из x
else st = 102; // заменить вихрь
break;