+ else if (bin_width_in >= interval)
+ {
+ binwidth = interval;
+ *adjusted_min = lower;
+ }
+ else if (bin_width_in >= (2.0/3.0 * interval))
+ {
+ binwidth = (2.0/3.0 * interval);
+ if (min >= lower + binwidth)
+ *adjusted_min = lower + binwidth;
+ else
+ *adjusted_min = lower;
+ }
+ else
+ {
+ int i;
+ for(i = 2; bin_width_in < interval/i; i++);
+ binwidth = interval/i;
+ *adjusted_min = floor((min - lower)/binwidth)*binwidth + lower;
+ }
+
+ nbins = ceil((max-*adjusted_min)/binwidth);
+ *adjusted_max = nbins*binwidth + *adjusted_min;
+
+ return nbins;
+}
+
+
+struct histogram *
+histogram_create (double bin_width_in, double min, double max)
+{
+ struct histogram *h;
+ struct statistic *stat;
+ int bins;
+ double adjusted_min, adjusted_max;
+
+ if (max == min)
+ {
+ msg (MW, _("Not creating histogram because the data contains less than 2 distinct values"));
+ return NULL;
+ }
+
+ assert (bin_width_in > 0);