You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ps...@apache.org on 2005/10/16 00:16:36 UTC

svn commit: r321508 - in /jakarta/commons/proper/math/branches/MATH_1_1: ./ src/java/org/apache/commons/math/stat/descriptive/rank/ src/test/org/apache/commons/math/stat/ src/test/org/apache/commons/math/stat/descriptive/rank/ xdocs/

Author: psteitz
Date: Sat Oct 15 15:16:28 2005
New Revision: 321508

URL: http://svn.apache.org/viewcvs?rev=321508&view=rev
Log:
Fixed incorrect NaN handling in o.a.m.s.d.rank.Min, Max
PR# 37019
Reported by Mark Osborn
Patch provided by Mauro Talevi

Modified:
    jakarta/commons/proper/math/branches/MATH_1_1/project.xml
    jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Max.java
    jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Min.java
    jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/StatUtilsTest.java
    jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MaxTest.java
    jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MinTest.java
    jakarta/commons/proper/math/branches/MATH_1_1/xdocs/changes.xml

Modified: jakarta/commons/proper/math/branches/MATH_1_1/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/project.xml?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/project.xml (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/project.xml Sat Oct 15 15:16:28 2005
@@ -152,6 +152,9 @@
       <name>Christopher Schuck</name>
     </contributor>
     <contributor>
+      <name>Mauro Talevi</name>
+    </contributor>
+    <contributor>
       <name>Kim van der Linde</name>
     </contributor>
     <contributor>

Modified: jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Max.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Max.java?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Max.java (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Max.java Sat Oct 15 15:16:28 2005
@@ -112,7 +112,9 @@
         if (test(values, begin, length)) {
             max = values[begin];
             for (int i = begin; i < begin + length; i++) {
-                max = (max > values[i]) ? max : values[i];
+                if (!Double.isNaN(values[i])) {
+                    max = (max > values[i]) ? max : values[i];
+                }
             }
         }
         return max;

Modified: jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Min.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Min.java?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Min.java (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/src/java/org/apache/commons/math/stat/descriptive/rank/Min.java Sat Oct 15 15:16:28 2005
@@ -114,7 +114,9 @@
         if (test(values, begin, length)) {
             min = values[begin];
             for (int i = begin; i < begin + length; i++) {
-                min = (min < values[i]) ? min : values[i];
+                if (!Double.isNaN(values[i])) {
+                    min = (min < values[i]) ? min : values[i];
+                }
             }
         }
         return min;

Modified: jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/StatUtilsTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/StatUtilsTest.java?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/StatUtilsTest.java (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/StatUtilsTest.java Sat Oct 15 15:16:28 2005
@@ -42,6 +42,7 @@
     private double skewness = 0;
     private double kurtosis = 0.5;
     private double tolerance = 10E-15;
+    private double nan = Double.NaN;
 
     public StatUtilsTest(String name) {
         super(name);
@@ -296,6 +297,22 @@
         // test many
         x = new double[] {one, two, two, three};
         TestUtils.assertEquals(three, StatUtils.max(x, 1, 3), tolerance);
+
+        // test first nan is ignored
+        x = new double[] {nan, two, three};
+        TestUtils.assertEquals(three, StatUtils.max(x), tolerance);
+
+        // test middle nan is ignored
+        x = new double[] {one, nan, three};
+        TestUtils.assertEquals(three, StatUtils.max(x), tolerance);
+        
+        // test last nan is ignored
+        x = new double[] {one, two, nan};
+        TestUtils.assertEquals(two, StatUtils.max(x), tolerance);
+
+        // test all nan returns nan
+        x = new double[] {nan, nan, nan};
+        TestUtils.assertEquals(nan, StatUtils.max(x), tolerance);
     }
     
     public void testMin() {
@@ -319,6 +336,22 @@
         // test many
         x = new double[] {one, two, two, three};
         TestUtils.assertEquals(two, StatUtils.min(x, 1, 3), tolerance);
+
+        // test first nan is ignored
+        x = new double[] {nan, two, three};
+        TestUtils.assertEquals(two, StatUtils.min(x), tolerance);
+
+        // test middle nan is ignored
+        x = new double[] {one, nan, three};
+        TestUtils.assertEquals(one, StatUtils.min(x), tolerance);
+        
+        // test last nan is ignored
+        x = new double[] {one, two, nan};
+        TestUtils.assertEquals(one, StatUtils.min(x), tolerance);
+
+        // test all nan returns nan
+        x = new double[] {nan, nan, nan};
+        TestUtils.assertEquals(nan, StatUtils.min(x), tolerance);
     }
     
     public void testPercentile() {

Modified: jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MaxTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MaxTest.java?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MaxTest.java (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MaxTest.java Sat Oct 15 15:16:28 2005
@@ -72,4 +72,13 @@
         assertEquals(Double.POSITIVE_INFINITY, max.evaluate(testArray), 0);     
     }
 
+    public void testNaNs() {
+        Max max = new Max();
+        double nan = Double.NaN;
+        assertEquals(3d, max.evaluate(new double[]{nan, 2d, 3d}), 0);     
+        assertEquals(3d, max.evaluate(new double[]{1d, nan, 3d}), 0);     
+        assertEquals(2d, max.evaluate(new double[]{1d, 2d, nan}), 0);     
+        assertTrue(Double.isNaN(max.evaluate(new double[]{nan, nan, nan})));     
+    }
+
 }

Modified: jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MinTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MinTest.java?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MinTest.java (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/src/test/org/apache/commons/math/stat/descriptive/rank/MinTest.java Sat Oct 15 15:16:28 2005
@@ -72,4 +72,13 @@
         assertEquals(Double.NEGATIVE_INFINITY, min.evaluate(testArray), 0);     
     }
 
+    public void testNaNs() {
+        Min min = new Min();
+        double nan = Double.NaN;
+        assertEquals(2d, min.evaluate(new double[]{nan, 2d, 3d}), 0);     
+        assertEquals(1d, min.evaluate(new double[]{1d, nan, 3d}), 0);     
+        assertEquals(1d, min.evaluate(new double[]{1d, 2d, nan}), 0);     
+        assertTrue(Double.isNaN(min.evaluate(new double[]{nan, nan, nan})));     
+    }
+    
 }

Modified: jakarta/commons/proper/math/branches/MATH_1_1/xdocs/changes.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/math/branches/MATH_1_1/xdocs/changes.xml?rev=321508&r1=321507&r2=321508&view=diff
==============================================================================
--- jakarta/commons/proper/math/branches/MATH_1_1/xdocs/changes.xml (original)
+++ jakarta/commons/proper/math/branches/MATH_1_1/xdocs/changes.xml Sat Oct 15 15:16:28 2005
@@ -45,6 +45,9 @@
        and numerical utilities, and a PRNG pluggability framework making it
        possible to replace the JDK-supplied random number generator in
        commons-math (and elsewhere) with alternative PRNG implementations.">
+      <action dev="psteitz" type="fix" issue="37019" due-to="Mauro Talevi">
+        Fixed incorrect NaN handling in o.a.m.s.d.rank.Min, Max
+      </action>
       <action dev="psteitz" type="fix" issue="36491">
        Changed RealMatrixImpl.equals to use Double.doubleToLongBits to compare
        corresponding matrix entries.



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org