code: public static Distribution createExponential(int numFiniteBuckets, double growthFactor,
        double scale) {
      if (numFiniteBuckets <= 0) {
        throw new IllegalArgumentException(MSG_BAD_NUM_FINITE_BUCKETS);
      }
      if (growthFactor <= 1.0) {
        throw new IllegalArgumentException(String.format(MSG_DOUBLE_TOO_LOW, "growth factor", 1.0));
      }
      if (scale <= 0.0) {
        throw new IllegalArgumentException(String.format(MSG_DOUBLE_TOO_LOW, "scale", 0.0));
      }
      ExponentialBuckets buckets = ExponentialBuckets.newBuilder().setGrowthFactor(growthFactor)
          .setNumFiniteBuckets(numFiniteBuckets).setScale(scale).build();
      Builder builder = Distribution.newBuilder().setExponentialBuckets(buckets);
      for (int i = 0; i < numFiniteBuckets + 2; i++) {
        builder.addBucketCounts(0L);
      }
      return builder.build();
    }
docs: Creates an {@code Distribution} with {@code ExponentialBuckets}.
  
  @param numFiniteBuckets initializes the number of finite buckets
  @param growthFactor initializes the growth factor
  @param scale initializes the scale
  @return a {@code Distribution} with {@code ExponentialBuckets}
  @throws IllegalArgumentException if a bad input prevents creation.