code: public void add(long value, long count)
      {
          checkArgument(count > 0, "count must be > 0");
  
          boolean needsCompression = false;
          double weight = count;
          if (alpha > 0.0) {
              long nowInSeconds = TimeUnit.NANOSECONDS.toSeconds(ticker.read());
              if (nowInSeconds - landmarkInSeconds >= RESCALE_THRESHOLD_SECONDS) {
                  rescale(nowInSeconds);
                  needsCompression = true; // rescale affects weights globally, so force compression
              }
  
              weight = weight(nowInSeconds) * count;
          }
  
          max = Math.max(max, value);
          min = Math.min(min, value);
  
          double previousCount = weightedCount;
          insert(longToBits(value), weight);
  
          // When totalCount crosses the next multiple of k (compression factor), the compression
          // equation changes for every node in the tree, so we need to compress globally.
          // Otherwise, only node along the insertion path are affected -- TODO: implement this.
          int compressionFactor = calculateCompressionFactor();
          if (needsCompression || ((long) previousCount) / compressionFactor != ((long) weightedCount) / compressionFactor) {
              compress();
          }
      }
docs: Adds a value to this digest. The value must be {@code >= 0}