private List<Point> Values = new List<Point>(); //массив точек(точки вида: значение, вероятность) #endregion Fields #region Constructors //конструктор private DiscreteDistributionFunction(List<Point> values) { func = this;//сохраняем в func адрес создаваемого объекта Values = values;//сохраняем пришедшие точки double control = 0;// проверяем чтобы суммарная вероятность была равна 1 for (int i = 0; i < Values.Count; i++) { control += Values[i].GetP; } int tochnost = 10000;//настройка точности проверки 10000-до 4 знака, 1000 - до 3 знака включительно и т.д. if ((Math.Round(control * tochnost) / tochnost) != 1) { //Проверка на то, что суммарная вероятность около 1 throw new Exception("Суммарная вероятность должна быть равна 1\n"); } }
//конструктор public DiscreteInverseGenerator(List<Point> Values) { Function = DiscreteDistributionFunction.Create(Values);//получаем экземпляр функции распределения }
//метод создания public static DiscreteDistributionFunction Create(List<Point> values) { func = new DiscreteDistributionFunction(values);//создаем экземпляр функции return func;//возвращаем созданный объект }
//приватный конструктор private DiscreteDistributionFunction() { func = this;//запрещает создание через конструктор напрямую }