code: public static Distribution createLinear(int numFiniteBuckets, double width, double offset) {
      if (numFiniteBuckets <= 0) {
        throw new IllegalArgumentException(MSG_BAD_NUM_FINITE_BUCKETS);
      }
      if (width <= 0.0) {
        throw new IllegalArgumentException(String.format(MSG_DOUBLE_TOO_LOW, "width", 0.0));
      }
      LinearBuckets buckets = LinearBuckets.newBuilder().setOffset(offset).setWidth(width)
          .setNumFiniteBuckets(numFiniteBuckets).build();
      Builder builder = Distribution.newBuilder().setLinearBuckets(buckets);
      for (int i = 0; i < numFiniteBuckets + 2; i++) {
        builder.addBucketCounts(0L);
      }
      return builder.build();
    }
docs: Creates a {@code Distribution} with {@code LinearBuckets}.
  
  @param numFiniteBuckets initializes the number of finite buckets
  @param width initializes the width of each bucket
  @param offset initializes the offset of the start bucket
  @return a {@code Distribution} with {@code LinearBuckets}
  @throws IllegalArgumentException if a bad input prevents creation.