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

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

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