public void FindClassificationErrorFullPossibility()
        {
            double step = 0.00001;

            Class1ErrorAssignmentChance  = 0;
            Class1ErrorNotAssignedChance = 0;

            DoubleRange range1 = NormalDistributionClass1.GetRange(0.99);
            DoubleRange range2 = NormalDistributionClass2.GetRange(0.99);
            double      begin  = range2.Min;
            double      end    = FindDistributionEqualityPoint();

            double f1(double x) => Chance2 / Math.Sqrt(Variance2 * 2 * Math.PI)
            * Math.Exp(Math.Pow((x - Mean2), 2) / (-2 * Variance2));

            Class1ErrorAssignmentChance = DoubleExponentialTransformation.Integrate(f1, begin, end, 1e-5);

            begin = end;
            end   = range1.Max;
            double f2(double x) => Chance1 / Math.Sqrt(Variance1 * 2 * Math.PI)
            * Math.Exp(Math.Pow((x - Mean1), 2) / (-2 * Variance1));

            Class1ErrorNotAssignedChance = DoubleExponentialTransformation.Integrate(f2, begin, end, 1e-5);

            //double x = Math.Min(range1.Min, range2.Min);
            //double max = Math.Max(range2.Max, range1.Max);

            //bool equalityPointPassed = false;
            //while (x < max)
            //{
            //    double dens1 = NormalDistributionClass1.ProbabilityDensityFunction(x);
            //    double dens2 = NormalDistributionClass2.ProbabilityDensityFunction(x);

            //    if (!equalityPointPassed)
            //        Class1ErrorAssignmentChance += dens2 * chance2;
            //    else
            //        Class1ErrorNotAssignedChance += dens1 * chance1;

            //    if (Math.Abs(dens1 - dens2) < 0.00003)
            //        equalityPointPassed = true;

            //    x += step;
            //}
        }
        public double FindDistributionEqualityPoint(double step = 0.0001, double accuracy = 0.0001)
        {
            DoubleRange range1 = NormalDistributionClass1.GetRange(0.99);
            DoubleRange range2 = NormalDistributionClass2.GetRange(0.99);

            double x   = Math.Min(range1.Min, range2.Min);
            double max = Math.Max(range2.Max, range1.Max);

            while (x < max)
            {
                double dens1 = NormalDistributionClass1.ProbabilityDensityFunction(x) * Chance1;
                double dens2 = NormalDistributionClass2.ProbabilityDensityFunction(x) * Chance2;

                if (Math.Abs(dens1 - dens2) < accuracy)
                {
                    return(x);
                }

                x += step;
            }

            throw new InvalidOperationException();
        }