histogram - fixed missing cases which have the maximum value
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>
Mon, 15 Feb 2016 18:26:43 +0000 (19:26 +0100)
committerFriedrich Beckmann <friedrich.beckmann@gmx.de>
Mon, 15 Feb 2016 18:38:03 +0000 (19:38 +0100)
The histogram uses gsl_histogram routines which exclude values from
the last bin when the value is exactly the maximum value, i.e. the upper
value of the last bin. This results in excluded cases in the histogram.

This fixes bug #47139: https://savannah.gnu.org/bugs/?47139

src/math/histogram.c

index 9158590dd75c3a140244292004087a773eddec3c..e46986d2e0dff4ef6ba4a445cbc9c12aa34b7d0b 100644 (file)
@@ -45,8 +45,17 @@ static void
 acc (struct statistic *s, const struct ccase *cx UNUSED, double c, double cc UNUSED, double y)
 {
   struct histogram *hist = UP_CAST (s, struct histogram, parent);
+  gsl_histogram *gslh = hist->gsl_hist;
 
-  gsl_histogram_accumulate (hist->gsl_hist, y, c);
+  /* Include cases which are just on the boundary */
+  if (y == gsl_histogram_max (gslh))
+    {
+      double lower, upper;
+      gsl_histogram_get_range (gslh, gsl_histogram_bins (gslh)-1, &lower, &upper);
+      gsl_histogram_accumulate (gslh, lower + (upper - lower)/2.0, c);
+    }
+  else
+    gsl_histogram_accumulate (hist->gsl_hist, y, c);
 }
 
 static void