Первый тест самый простой - проверка на однородность. О нем мы уже говорили. Фактически случайные числа будут проверяться на равномерность распределения по диапазону от 0.0 до 1.0. Разобьем весь диапазон на 100 поддиапазонов, сформируем набор из 1000000 случайных чисел и вычислим количество значений, попавших в каждый поддиапазон. В поддиапазоне 0 будут находиться значения от 0.00 до 0.01, в поддиапазоне 1 - значения от 0.01 до 0.02 и т.д. Вероятность попадания случайного числа в любой поддиапазон составляет 0.01. Для полученного распределения вычислим значение параметра хи-квадрат и сравним его с данными для стандартного распределения хи-квадрат, находящимися в строке, для 99 степеней свободы.

Листинг 6.5. Тест на однородность

procedure Unif omityTest (RandGen : TtdBasePRNG;
var ChiSquare : double;
var DegsFreedo : integer);
var
ВискеtNumber, i : integers-Expected, ChiSqVal : doubles-Bucket : array [0. .pred(Uniformitylntervals) ] of integers-begin
{вычислить количество чисел в каждом поддиапазоне)
FillChar(Bucket, sizeof(Bucket), 0);
for i := 0 to pred(UniformityCount) do begin
BucketNumber := trunc(RandGen.AsDouble * Uniformitylntervals) ,-
inc (Bucket [BucketNumber]) ;
end;
{вычислить значение параметра xu-квадрат) Expected := UniformityCount / Uniformitylntervals;
ChiSqVal := 0.0;
for i := 0 to pred(Uniformitylntervals) do
ChiSqVal := ChiSqVal + (Sqr (Expected - Bucket [i]) / Expected) ; {вернуть значения) ChiSquare := ChiSqVal;
DegsFreedom := pred(Uniformitylntervals);
end;

Тестирование || Оглавление || Тест на пропуски


Фундаментальные алгоритмы и структуры данных в Delphi



Новости за месяц

  • Июль
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс