- /* Shift the range away from the sparse end, EXCEPT if that is the upper end,
- and it was extended to prevent the maximum value from getting lost */
- if (sparse_end == +1 && upper_remainder > 0)
+ /* If there is not enough slack at either end to perform a shift,
+ then we must extend the range so that there is. We must extend
+ by two half bin widths in order to preserve the EVEN condition
+ established above. Also, we extend on the end with the least
+ slack, in order to keep things as balanced as possible. */
+ if ( upper_slack > lower_slack && upper_slack <= half_bin_width)
+ {
+ lower_limit -= 2;
+ lower_slack += 2 * half_bin_width;
+ }
+
+ if (lower_slack > upper_slack && lower_slack < half_bin_width)
+ {
+ upper_limit += 2;
+ upper_slack += 2 * half_bin_width;
+ }
+
+ if (upper_slack > lower_slack)