class MoreMath::Sequence
def percentile(p = 50)
the weighted average at x_(n + 1)p, which allows p to be in 0...100
There are many methods to compute the percentile, this method uses the
Returns the +p+-percentile of the elements.
def percentile(p = 50) (0...100).include?(p) or raise ArgumentError, "p = #{p}, but has to be in (0...100)" p /= 100.0 sorted_elements = sorted r = p * (sorted_elements.size + 1) r_i = r.to_i r_f = r - r_i if r_i >= 1 result = sorted_elements[r_i - 1] if r_i < sorted_elements.size result += r_f * (sorted_elements[r_i] - sorted_elements[r_i - 1]) end else result = sorted_elements[0] end result end