Previous Page  11 / 25 Next Page
Information
Show Menu
Previous Page 11 / 25 Next Page
Page Background

А.Ф. Деон, Ю.А. Меняев

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;