now builds frequency tables
[pspp] / src / math / histogram.c
index 3f31ece4b17160804b149d06b6d6dd386cef9dc2..8aaa16f9e0a684bca8333fee51d6c6874319a69b 100644 (file)
@@ -45,17 +45,8 @@ 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;
 
-  /* 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);
+  gsl_histogram_accumulate (hist->gsl_hist, y, c);
 }
 
 static void
@@ -128,6 +119,15 @@ hist_find_pretty_no_of_bins(double bin_width_in, double min, double max,
   nbins = ceil((max-*adjusted_min)/binwidth);
   *adjusted_max = nbins*binwidth + *adjusted_min;
 
+  /* adjusted_max should never be smaller than max but if it is equal
+     then the gsl_histogram will not add the cases which have max value */
+  if (*adjusted_max <= max)
+    {
+      *adjusted_max += binwidth;
+      nbins++;
+    }
+  assert (*adjusted_min <= min);
+
   return nbins;
 }