+ double lower, interval;
+ int n_ticks;
+ double binwidth;
+ int nbins;
+
+ chart_get_scale (max, min, &lower, &interval, &n_ticks);
+
+ if (bin_width_in >= 2 * interval)
+ {
+ binwidth = floor(bin_width_in/interval) * interval;
+ *adjusted_min = lower;
+ }
+ else if (bin_width_in >= 1.5 * interval)
+ {
+ binwidth = 1.5 * interval;
+ if (min < (lower + 0.5 * interval))
+ *adjusted_min = lower;
+ else
+ *adjusted_min = lower + 0.5 * interval;
+ }
+ 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);