    // The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
    /*
        This is an example illustrating the use of the running_stats object from the dlib C++
        Library.  It is a simple tool for computing basic statistics on a stream of numbers.
        In this example, we sample 100 points from the sinc function and then then compute the
        unbiased sample mean, variance, skewness, and excess kurtosis.

    */
    #include <iostream>
    #include <vector>
    #include <dlib/statistics.h>

    using namespace std;
    using namespace dlib;

    // Here we define the sinc function so that we may generate sample data. We compute the mean,
    // variance, skewness, and excess kurtosis of this sample data.

    double sinc(double x)
    {
        if (x == 0)
            return 1;
        return sin(x)/x;
    }

    int main()
    {
        running_stats<double> rs;

        double tp1 = 0;
        double tp2 = 0;

        // We first generate the data and add it sequentially to our running_stats object.  We
        // then print every fifth data point.
        for (int x = 1; x <= 100; x++)
        {
            tp1 = x/100.0;
            tp2 = sinc(pi*x/100.0);
            rs.add(tp2);

            if(x % 5 == 0)
            {
                cout << " x = " << tp1 << " sinc(x) = " << tp2 << endl;
            }
        }

        // Finally, we compute and print the mean, variance, skewness, and excess kurtosis of
        // our data.

        cout << endl;
        cout << "Mean:           " << rs.mean() << endl;
        cout << "Variance:       " << rs.variance() << endl;
        cout << "Skewness:       " << rs.skewness() << endl;
        cout << "Excess Kurtosis " << rs.ex_kurtosis() << endl;

        return 0;
    }