diff --git a/src/main/java/org/apache/commons/math/stat/descriptive/rank/Percentile.java b/src/main/java/org/apache/commons/math/stat/descriptive/rank/Percentile.java index c3cd66e0f..c813a2e99 100644 --- a/src/main/java/org/apache/commons/math/stat/descriptive/rank/Percentile.java +++ b/src/main/java/org/apache/commons/math/stat/descriptive/rank/Percentile.java @@ -41,9 +41,10 @@ import org.apache.commons.math.util.MathUtils; *
  • Compute the estimated percentile position * pos = p * (n + 1) / 100 and the difference, d * between pos and floor(pos) (i.e. the fractional - * part of pos). If pos >= n return the largest - * element in the array; otherwise
  • - *
  • Let lower be the element in position + * part of pos).
  • + *
  • If pos < 1 return the smallest element in the array.
  • + *
  • Else if pos >= n return the largest element in the array.
  • + *
  • Else let lower be the element in position * floor(pos) in the array and let upper be the * next element in the array. Return lower + d * (upper - lower) *
  • diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml index 1d0b40e37..2cf53d89a 100644 --- a/src/site/xdoc/changes.xml +++ b/src/site/xdoc/changes.xml @@ -52,6 +52,10 @@ The type attribute can be add,update,fix,remove. If the output is not quite correct, check for invisible trailing spaces! --> + + Fixed error in javadoc describing the behavior of the Percentile algorithm for + small percentiles in small datasets. + New "filter" package. Initial implementation of Kalman filter. diff --git a/src/test/java/org/apache/commons/math/stat/descriptive/rank/PercentileTest.java b/src/test/java/org/apache/commons/math/stat/descriptive/rank/PercentileTest.java index ad66549ed..584c5dcd5 100644 --- a/src/test/java/org/apache/commons/math/stat/descriptive/rank/PercentileTest.java +++ b/src/test/java/org/apache/commons/math/stat/descriptive/rank/PercentileTest.java @@ -52,6 +52,13 @@ public class PercentileTest extends UnivariateStatisticAbstractTest{ Percentile p = new Percentile(75); Assert.assertEquals(3.0, p.evaluate(d), 1.0e-5); } + + @Test + public void testLowPercentile() { + double[] d = new double[] {0, 1}; + Percentile p = new Percentile(25); + Assert.assertEquals(0d, p.evaluate(d), Double.MIN_VALUE); + } @Test public void testPercentile() {