From: SourceForge.net <no...@so...> - 2006-11-09 05:58:54
|
Bugs item #1593149, was opened at 2006-11-09 05:58 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1593149&group_id=15494 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Alex Mont (alex319) Assigned to: Nobody/Anonymous (nobody) Summary: BoxAndWhiskerCalculator computes max/min of NaNs incorrectly Initial Comment: If an array consisting of partially NaNs is passed to the BoxAndWhiskerCalculator, the computed "max" and "min" will be NaN. The cause of this error is that NaNs are checked for using "minRegularValue == Double.NaN" (lines 114 and 120 of org.jfree.data.statistics.BoxAndWhiskerCalculator.java), which always returns false because nothing is equal to Double.NaN. (The correct way to check is to use Double.isNaN()). The following is a test case that demonstrates the error. It prints "NaN NaN". ---- import java.util.ArrayList; import org.jfree.data.statistics.*; import java.lang.Double; ArrayList theList = new ArrayList(5); theList.add(0, new Double(1.0)); theList.add(1, new Double(2.0)); theList.add(2, new Double(Double.NaN)); theList.add(3, new Double(3.0)); theList.add(4, new Double(4.0)); BoxAndWhiskerItem theItem = BoxAndWhiskerCalculator.calculateBoxAndWhiskerStatistics(theList); Number minVal = theItem.getMinRegularValue(); Number maxVal = theItem.getMaxRegularValue(); System.out.println(minVal.toString() + " " + maxVal.toString()); ---- Note that even if the checks on lines 114 and 120 were chenged to use Double.isNaN(), this would still be incorrect, since when going through the list it would put the NaN in minRegularValue and maxRegularValue and then replace it when the net element in the list, effectively removing all prior elements in the list from consideration to be the minimum or the maximum. In this case, the function would print "3.0 4.0", instead of "1.0 4.0" like it should. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1593149&group_id=15494 |
From: SourceForge.net <no...@so...> - 2006-11-10 17:06:52
|
Bugs item #1593149, was opened at 2006-11-09 05:58 Message generated for change (Settings changed) made by mungady You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1593149&group_id=15494 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: General >Group: 1.0.x Status: Open Resolution: None >Priority: 9 Private: No Submitted By: Alex Mont (alex319) >Assigned to: David Gilbert (mungady) Summary: BoxAndWhiskerCalculator computes max/min of NaNs incorrectly Initial Comment: If an array consisting of partially NaNs is passed to the BoxAndWhiskerCalculator, the computed "max" and "min" will be NaN. The cause of this error is that NaNs are checked for using "minRegularValue == Double.NaN" (lines 114 and 120 of org.jfree.data.statistics.BoxAndWhiskerCalculator.java), which always returns false because nothing is equal to Double.NaN. (The correct way to check is to use Double.isNaN()). The following is a test case that demonstrates the error. It prints "NaN NaN". ---- import java.util.ArrayList; import org.jfree.data.statistics.*; import java.lang.Double; ArrayList theList = new ArrayList(5); theList.add(0, new Double(1.0)); theList.add(1, new Double(2.0)); theList.add(2, new Double(Double.NaN)); theList.add(3, new Double(3.0)); theList.add(4, new Double(4.0)); BoxAndWhiskerItem theItem = BoxAndWhiskerCalculator.calculateBoxAndWhiskerStatistics(theList); Number minVal = theItem.getMinRegularValue(); Number maxVal = theItem.getMaxRegularValue(); System.out.println(minVal.toString() + " " + maxVal.toString()); ---- Note that even if the checks on lines 114 and 120 were chenged to use Double.isNaN(), this would still be incorrect, since when going through the list it would put the NaN in minRegularValue and maxRegularValue and then replace it when the net element in the list, effectively removing all prior elements in the list from consideration to be the minimum or the maximum. In this case, the function would print "3.0 4.0", instead of "1.0 4.0" like it should. ---------------------------------------------------------------------- >Comment By: David Gilbert (mungady) Date: 2006-11-10 17:06 Message: Logged In: YES user_id=112975 Hmmm...one of the more embarassing bugs! I'll get that fixed before 1.0.3 goes out. Regards, Dave Gilbert JFreeChart Project Leader ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1593149&group_id=15494 |
From: SourceForge.net <no...@so...> - 2006-11-16 11:37:47
|
Bugs item #1593149, was opened at 2006-11-09 05:58 Message generated for change (Comment added) made by mungady You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1593149&group_id=15494 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: General Group: 1.0.x >Status: Closed Resolution: None Priority: 9 Private: No Submitted By: Alex Mont (alex319) Assigned to: David Gilbert (mungady) Summary: BoxAndWhiskerCalculator computes max/min of NaNs incorrectly Initial Comment: If an array consisting of partially NaNs is passed to the BoxAndWhiskerCalculator, the computed "max" and "min" will be NaN. The cause of this error is that NaNs are checked for using "minRegularValue == Double.NaN" (lines 114 and 120 of org.jfree.data.statistics.BoxAndWhiskerCalculator.java), which always returns false because nothing is equal to Double.NaN. (The correct way to check is to use Double.isNaN()). The following is a test case that demonstrates the error. It prints "NaN NaN". ---- import java.util.ArrayList; import org.jfree.data.statistics.*; import java.lang.Double; ArrayList theList = new ArrayList(5); theList.add(0, new Double(1.0)); theList.add(1, new Double(2.0)); theList.add(2, new Double(Double.NaN)); theList.add(3, new Double(3.0)); theList.add(4, new Double(4.0)); BoxAndWhiskerItem theItem = BoxAndWhiskerCalculator.calculateBoxAndWhiskerStatistics(theList); Number minVal = theItem.getMinRegularValue(); Number maxVal = theItem.getMaxRegularValue(); System.out.println(minVal.toString() + " " + maxVal.toString()); ---- Note that even if the checks on lines 114 and 120 were chenged to use Double.isNaN(), this would still be incorrect, since when going through the list it would put the NaN in minRegularValue and maxRegularValue and then replace it when the net element in the list, effectively removing all prior elements in the list from consideration to be the minimum or the maximum. In this case, the function would print "3.0 4.0", instead of "1.0 4.0" like it should. ---------------------------------------------------------------------- >Comment By: David Gilbert (mungady) Date: 2006-11-16 11:37 Message: Logged In: YES user_id=112975 Originator: NO Wow, it turned out to be a real rats nest...I've 'fixed' the problem by having the code strip out null and NaN items from the list. Maybe the whole approach needs rethinking, but not right now...closing as fixed. ---------------------------------------------------------------------- Comment By: David Gilbert (mungady) Date: 2006-11-10 17:06 Message: Logged In: YES user_id=112975 Hmmm...one of the more embarassing bugs! I'll get that fixed before 1.0.3 goes out. Regards, Dave Gilbert JFreeChart Project Leader ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115494&aid=1593149&group_id=15494 |