А.Ф. Деон, Ю.А. Меняев
98
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2
x[j] = (int)(((x[j] << 1) & maskW) | g);
}
x[N - 1] = (int)(((x[N - 1]<<1) & maskW)|z);// кольцо
}
//---------------------------------------------------------------
public void Start()
{ N = 1 << w; // длина последовательности
N1 = N - 1; // максимальное число
maskW = 0xFFFFFFFF >> (32 - w); // маска числа
maskU = (uint)(0x1 << (w - 1));// маска старшего бита
DeonYuli_SetA(); // установить границы для a1 и a2
DeonYuli_SetC(); // установить границы для с
x0 &= (int)maskW;
x = new int[N]; // массив последовательности
st = 1; // инициализация генератора
}
//---------------------------------------------------------------
public void TimeStart()
{ x0 = (int)DateTime.Now.Millisecond; // миллисекунды
Start(); // старт генератора
}
//---------------------------------------------------------------
public void SetW(int sw)
{ w = Math.Abs(sw); // битовая длина числа
if (w < 3) w = 3; // минимальная длина
else if (w > 28) w = 28; // максимальная длина
}
//---------------------------------------------------------------
public void SetA(double sab, double sae)
{ abf = Math.Abs(sab);
aef = Math.Abs(sae);
if (abf > 1.0) abf = 1.0;
if (aef > 1.0) aef = 1.0;
if (abf > aef) aef = abf;
}
//---------------------------------------------------------------
void DeonYuli_SetA()
{ a1b = (int)(N1 * abf); // нижняя грань для a1
a1b = DeonYuli_PlusA(a1b); // начало интервала a1
a2e = (int)(N1 * aef); // верхняя грань для a2
a2e = DeonYuli_MinusA(a2e); // окончание интервала a2
int r = a2e - a1b;
if (a1b >= a2e) // интервал a стянут в точку
{ a1e = a1b; // a1 состоит из одной точки
a2b = a1b; // интервал a2 совпадает с a1
a2e = a2b; // a2 состоит из одной точки
return;
}
if (r == 4) // одноточечные a1 и a2
{ a1e = a1b; // a1 состоит из одной точки
a2b = a2e; // a2 состоит из одной точки
return;
}
if (r == 8) // a1 имеет 2 точки, a2 - одну точку
{ a1e = a1b + 4; // окончание a1
a2b = a2e; // начало a2