Генератор равномерных случайных величин по технологии полного вихревого массива
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2
99
return;
}
a1e = (a1b + a2e) / 2; // середина для a
a2b = a1e;
a1e = DeonYuli_MinusA(a1e); // слева от середины
a2b = a1e + 4; // справа от середины
}
//---------------------------------------------------------------
int DeonYuli_PlusA(int a)
{ if (a < 1) { a = 1; return a; }
int z = a; // нижняя граница для a
for (int i = 0; i < 3; i++)
if (a % 4 != 0) a--; // условие равномерности
else break;
a++; // правильное значение константы a
if (a < z) a += 4; // справа от нижней границы
if (a >= N1) a -= 4; // слева от верхней границы
return a;
}
//---------------------------------------------------------------
int DeonYuli_MinusA(int a)
{ if (a < 1) { a = 1; return a; }
int z = a; // нижняя граница для a
for (uint i = 0; i < 3; i++)
if (a % 4 != 0) a--; // условие равномерности
else break;
a++; // правильное значение константы a
if (a > z) a -= 4; // слева от верхней границы
return a;
}
//---------------------------------------------------------------
public void SetC(double scb, double sce)
{ cbf = Math.Abs(scb);
cef = Math.Abs(sce);
if (cbf > 1.0) cbf = 1.0;
if (cef > 1.0) cef = 1.0;
if (cbf > cef) cef = cbf;
}
//---------------------------------------------------------------
void DeonYuli_SetC()
{ cb = (int)(N1 * cbf); // нижняя грань для c
if (cb % 2 == 0) cb += 1; // только нечетное c
if (cb > N1) cb = N1; // максимальное значение
ce = (int)(N1 * cef); // верхняя грань для c
if (ce % 2 == 0) ce -= 1; // только нечетное c
if (ce > N1) ce = N1; // максимальное значение
if (cb > ce) ce = cb;
c = cb; // начало конгруэнтной константы c
}
//---------------------------------------------------------------
public void SetX0(double xs)
{ x0 = (int)(N1 * Math.Abs(xs));
}
//===============================================================
}
}