docs: public static double[] initializeHistogram (final float start, 
                                                final float end, 
                                                final float focusRangeStart, 
                                                final float focusRangeEnd, 
                                                final float errorPct) {
      if (Float.compare(start, end) >= 0) {
          throw new IllegalArgumentException("Histogram start (" + start + ") must be "
              + "less than Histogram end (" + end +")");
      } else if (Float.compare(focusRangeStart, focusRangeEnd) >= 0) {
          throw new IllegalArgumentException("Histogram focus range start (" 
              + focusRangeStart + ") must be less than Histogram focus end (" 
              + focusRangeEnd + ")");
      } else if (Float.compare(start, focusRangeStart) > 0 || 
          Float.compare(focusRangeStart, end) >= 0 || 
          Float.compare(start, focusRangeEnd) >= 0 || 
          Float.compare(focusRangeEnd, end) > 0) {
          throw new IllegalArgumentException("Focus range start (" + focusRangeStart 
              + ") and Focus range end (" + focusRangeEnd + ") must be greater "
                  + "than Histogram start (" + start + ") and less than "
                      + "Histogram end (" + end + ")");
      } else if (Float.compare(errorPct, 0.0f) <= 0) {
          throw new IllegalArgumentException("Error rate (" + errorPct + ") must be "
              + "greater than zero");
      }
      int MAX_BUCKETS = 100;
      float stepSize = (1 + errorPct)/(1 - errorPct);
      int bucketcount = Double.valueOf(Math.ceil(
          Math.log(focusRangeEnd/focusRangeStart) / Math.log(stepSize)))
            .intValue() + 1;
  
      if (Float.compare(start, focusRangeStart) < 0) {
        bucketcount++;
      }
  
      if (Float.compare(focusRangeEnd, end) < 0) {
        bucketcount++;
      }
  
      if (bucketcount > MAX_BUCKETS) {
        throw new IllegalArgumentException("A max of " + MAX_BUCKETS 
            + " buckets are supported. " + bucketcount + " were requested");
      }
  
      double[] retval = new double[bucketcount];
      int j = 0;
      if (Float.compare(start, focusRangeStart) < 0) {
        retval[j] = start;
        j++;
      }
  
      for (float i = focusRangeStart; i < focusRangeEnd; i*=stepSize, j++) {
        retval[j] = i;
      }
  
      if (Float.compare(focusRangeEnd, end) < 0) {
        retval[j++] = focusRangeEnd;
      }
      retval[j] = end;
  
      return retval;
    }