Jellyfish.Commands.Metrics.PercentileSnapshot.ComputePercentile C# (CSharp) Method

ComputePercentile() private method

Percentile (Wikipedia) Percentile percentile of data desired data at the asked-for percentile. Interpolation is used if exactness is not possible
private ComputePercentile ( double percent ) : int
percent double
return int
        private int ComputePercentile(double percent)
        {
            // Some just-in-case edge cases
            if (length <= 0)
            {
                return 0;
            }
            else if (percent <= 0.0)
            {
                return data[0];
            }
            else if (percent >= 100.0)
            {
                return data[length - 1];
            }

            // ranking (http://en.wikipedia.org/wiki/Percentile#Alternative_methods)
            double rank = (percent / 100.0) * length;

            // linear interpolation between closest ranks
            int iLow = (int)Math.Floor(rank);
            int iHigh = (int)Math.Ceiling(rank);
            if (iHigh >= length)
            {
                // Another edge case
                return data[length - 1];
            }
            else if (iLow == iHigh)
            {
                return data[iLow];
            }
            else
            {
                // Interpolate between the two bounding values
                return (int)(data[iLow] + (rank - iLow) * (data[iHigh] - data[iLow]));
            }
        }
    }