/**
     * Estimation based on K<sup>th</sup> selection. This may be overridden in specific enums to
     * compute slightly different estimations.
     *
     * @param work array of numbers to be used for finding the percentile
     * @param pos indicated positional index prior computed from calling {@link #index(double, int)}
     * @param pivotsHeap an earlier populated cache if exists; will be used
     * @param length size of array considered
     * @param kthSelector a {@link KthSelector} used for pivoting during search
     * @return estimated percentile
     */
    protected double estimate(
        final double[] work,
        final int[] pivotsHeap,
        final double pos,
        final int length,
        final KthSelector kthSelector) {

      final double fpos = FastMath.floor(pos);
      final int intPos = (int) fpos;
      final double dif = pos - fpos;

      if (pos < 1) {
        return kthSelector.select(work, pivotsHeap, 0);
      }
      if (pos >= length) {
        return kthSelector.select(work, pivotsHeap, length - 1);
      }

      final double lower = kthSelector.select(work, pivotsHeap, intPos - 1);
      final double upper = kthSelector.select(work, pivotsHeap, intPos);
      return lower + dif * (upper - lower);
    }
 /**
  * Get the {@link PivotingStrategyInterface} used in KthSelector for computation.
  *
  * @return the pivoting strategy set
  */
 public PivotingStrategyInterface getPivotingStrategy() {
   return kthSelector.getPivotingStrategy();
 }