docs: static final double hllCompositeEstimate(final AbstractHllArray absHllArr) {
      final int lgConfigK = absHllArr.getLgConfigK();
      final double rawEst = getHllRawEstimate(lgConfigK, absHllArr.getKxQ0() + absHllArr.getKxQ1());
  
      final double[] xArr = CompositeInterpolationXTable.xArrs[lgConfigK - MIN_LOG_K];
      final double yStride = CompositeInterpolationXTable.yStrides[lgConfigK - MIN_LOG_K];
      final int xArrLen = xArr.length;
  
      if (rawEst < xArr[0]) { return 0; }
  
      final int xArrLenM1 = xArrLen - 1;
  
      if (rawEst > xArr[xArrLenM1]) {
        final double finalY = yStride * (xArrLenM1);
        final double factor = finalY / xArr[xArrLenM1];
        return rawEst * factor;
      }
  
      final double adjEst =
          CubicInterpolation.usingXArrAndYStride(xArr, yStride, rawEst);
  
      // We need to completely avoid the linear_counting estimator if it might have a crazy value.
      // Empirical evidence suggests that the threshold 3*k will keep us safe if 2^4 <= k <= 2^21.
  
      if (adjEst > (3 << lgConfigK)) { return adjEst; }
      //Alternate call
      //if ((adjEst > (3 << lgConfigK)) || ((curMin != 0) || (numAtCurMin == 0)) ) { return adjEst; }
  
      final double linEst =
          getHllBitMapEstimate(lgConfigK, absHllArr.getCurMin(), absHllArr.getNumAtCurMin());
  
      // Bias is created when the value of an estimator is compared with a threshold to decide whether
      // to use that estimator or a different one.
      // We conjecture that less bias is created when the average of the two estimators
      // is compared with the threshold. Empirical measurements support this conjecture.
  
      final double avgEst = (adjEst + linEst) / 2.0;
  
      // The following constants comes from empirical measurements of the crossover point
      // between the average error of the linear estimator and the adjusted hll estimator
      double crossOver = 0.64;
      if (lgConfigK == 4)      { crossOver = 0.718; }
      else if (lgConfigK == 5) { crossOver = 0.672; }
  
      return (avgEst > (crossOver * (1 << lgConfigK))) ? adjEst : linEst;
    }