public void Add(double x)
        {
            int size = data.Span;

            if (size < Span)
            {
                double mean     = Mean + (x - Mean) / (size + 1);
                double variance = 0.0;
                if (size != 0)
                {
                    variance  = size * Variance;
                    variance += (x - Mean) * (x - mean);
                    variance /= (size + 1);
                }
                _mean     = mean;
                _variance = variance;
            }
            else
            {
                //Var[b] = [ (n-1)*Var[A] + n*Abar^2 + (x6^2 - x1^2) - n*Bbar^2 ] / (n-1)
                double mean = Mean + (x - data[0]) / Span;
                _variance = (Span * Variance + Span * (Mean * Mean - mean * mean) + x * x - data[0] * data[0]) / Span;
                _mean     = mean;
            }
            data.Add(x);
        }
        public void FillArray()
        {
            var array = new ShiftingArray <int>(5);
            var list  = new int[] {
                1, 2, 3, 4, 5, 6, 7, 8, 9
            };

            for (int i = 0; i < 5; i++)
            {
                array.Add(list[i]);
                Assert.That(array.Span, Is.EqualTo(i + 1));
                Assert.That(array[i], Is.EqualTo(list[i]));
            }

            for (int i = 5; i < list.Length; i++)
            {
                array.Add(list[i]);
                Assert.That(array.Span, Is.EqualTo(5));
                Assert.That(array[0], Is.EqualTo(list[i - 4]));
                Assert.That(array[4], Is.EqualTo(list[i]));
            }
        }
Exemple #3
0
        public double Add(double x)
        {
            int size = data.Span;

            if (size < Span)
            {
                _average = (size * _average + x) / (size + 1);
            }
            else
            {
                _average += (x - data[0]) / Span;
            }
            data.Add(x);

            return(_average);
        }