示例#1
0
    static void ShowResults(FrequencyArray freq, string heading, string xlabel)
    {
        Console.WriteLine("\n{0}\n", heading);
        Console.WriteLine("Max {0}: {1}", xlabel, freq.Value(freq.Length - 1));
        Stats stats = new Stats();

        stats.Calc(freq);
        Console.WriteLine("Sample size: {0}", stats.Size());
        Console.WriteLine("Average: {0}", stats.Average().ToStringMixed());
        Console.WriteLine("Median: {0}", stats.Median());
        Console.WriteLine("Mode: {0}", stats.Mode());
        Console.WriteLine("Standard Deviation: {0}", stats.StandardDeviation().ToStringMixed());
        display_graph(freq, xlabel, "Frequency");
    }
示例#2
0
    static void display_graph(FrequencyArray freq_data, string xlabel, string ylabel)
    {
        // Determine scale for graph
        int    i;
        double scale = (double)teminal_cols / (double)freq_data.MaxFreq;

        Console.WriteLine("\n{0}|                 {1}", xlabel, ylabel);
        Console.WriteLine(new String('-', teminal_cols + 6));
        for (i = 0; i < freq_data.Length; i++)
        {
            string bar = new String('#', (int)Math.Round(freq_data.Frequency(i) * scale));
            Console.WriteLine("{0}|{1} {2}", freq_data.Value(i), bar, freq_data.Frequency(i));
        }
        Console.WriteLine();
    }
示例#3
0
    static void SingleTest(int denominator)
    {
        FrequencyArray time_freq = new FrequencyArray();
        FrequencyArray loop_freq = new FrequencyArray();

        DoTest(denominator, time_freq, loop_freq);
        time_freq.Sort();
        loop_freq.Sort();
        ShowResults(time_freq, "Time taken to convert floating point to faction (time is in 10s of nanoseconds)", "Time");
#if CALCULATE_LOOP_STATISTICS
        ShowResults(loop_freq, "Iterations taken to convert floating point to faction", "Loops");
#else
        Console.WriteLine("\nStatistics for loop count not gathered. To enable loop statistics,\n");
        Console.WriteLine("recompile defining \"CALCULATE_LOOP_STATISTICS\"\n");
#endif
    }
示例#4
0
    static void RandomTest(int minTests)
    {
        Random    rnd          = new Random();
        ArrayList denominators = new ArrayList();
        int       nTests       = 0;

        while (nTests < minTests)
        {
            int denominator = rnd.Next(minTests, 214748364) % minTests;
            // Make sure it's a unique denominator
            bool found = false;
            foreach (int dem in denominators)
            {
                if (dem == denominator)
                {
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                denominators.Add(denominator);
                nTests += denominator - 1;
            }
        }

        FrequencyArray time_freq = new FrequencyArray();
        FrequencyArray loop_freq = new FrequencyArray();

        foreach (int denominator in denominators)
        {
            DoTest(denominator, time_freq, loop_freq);
        }
        time_freq.Sort();
        loop_freq.Sort();
        ShowResults(time_freq, "Time taken to convert floating point to faction (time is in 10s of nanoseconds)", "Time");
#if CALCULATE_LOOP_STATISTICS
        ShowResults(loop_freq, "Iterations taken to convert floating point to faction", "Loops");
#else
        Console.WriteLine("\nStatistics for loop count not gathered. To enable loop statistics,\n");
        Console.WriteLine("recompile defining \"CALCULATE_LOOP_STATISTICS\"\n");
#endif
    }
示例#5
0
    static long tnanosecPerTick = (1000L * 1000L * 100L) / Stopwatch.Frequency; // 10s of nanosecond conversion factor

    static void DoTest(int denominator, FrequencyArray time_freq, FrequencyArray loop_freq)
    {
        Stopwatch stopWatch; // = Stopwatch.StartNew();
        Fraction  f = new Fraction(0.0);
        int       i;

        for (i = 0; i < denominator; i++)
        {
            stopWatch = Stopwatch.StartNew();
            f.Set(((double)i) / ((double)denominator));
            stopWatch.Stop();
            // According to Microsoft docs, when using Stopwatch, the first execution should be ignored
            if (i > 0)
            {
                time_freq.Increment((int)(stopWatch.Elapsed.Ticks * tnanosecPerTick));
#if CALCULATE_LOOP_STATISTICS
                loop_freq.Increment(Fraction.nLoops);
#endif
            }
        }
    }
示例#6
0
    public void Calc(FrequencyArray freq_data)
    {
        // Average
        _size = 0;
        int i, sum = 0, max_freq = 0;

        for (i = 0; i < freq_data.Length; i++)
        {
            _size += freq_data.Frequency(i);
            sum   += i * freq_data.Frequency(i);
            if (freq_data.Frequency(i) > max_freq)
            {
                max_freq = freq_data.Frequency(i);
                _mode    = i;
            }
        }
        _average = (double)sum / (double)_size;

        // median and variance
        double var   = 0;
        int    count = 0;

        _median = -1;
        for (i = 0; i < freq_data.Length; i++)
        {
            var   += (i - _average) * (i - _average) * freq_data.Frequency(i);
            count += freq_data.Frequency(i);
            if (_median == -1 && count >= _size / 2)
            {
                _median = i;
            }
        }

        // standard deviation
        _standard_deviation = Math.Sqrt(var / (double)(_size - 1));
    }