docs: public float[] percentilesFloat(double[] pcts)
    {
      readWriteLock.readLock().lock();
  
      try {
        float[] results = new float[pcts.length];
        long total = count;
  
        int pctIdx = 0;
  
        long prev = 0;
        double prevP = 0.0;
        double prevB = lowerLimit;
        for (int i = 0; i < numBuckets; ++i) {
          long next = prev + histogram[i];
          double nextP = 100.0 * next / total;
          double nextB = (i + 1) * bucketSize + lowerLimit;
          while (pctIdx < pcts.length && nextP >= pcts[pctIdx]) {
            double f = (pcts[pctIdx] - prevP) / (nextP - prevP);
            results[pctIdx] = (float) (f * (nextB - prevB) + prevB);
            ++pctIdx;
          }
          if (pctIdx >= pcts.length) {
            break;
          }
          prev = next;
          prevP = nextP;
          prevB = nextB;
        }
  
        return results;
      }
      finally {
        readWriteLock.readLock().unlock();
      }
    }