public double doTrial()

in src/main/java/org/apache/datasketches/characterization/kll/KllSketchAccuracyProfile.java [138:202]


  public double doTrial() {
    double worstNegRankError = 0;
    double worstPosRankError = 0;

    if (useDouble) {
      shuffle(inputDoubleValues);
      // reset then update sketch
      dskUT.reset();
      for (int i = 0; i < streamLength; i++) {
        dskUT.update(inputDoubleValues[i]);
      }

      // query sketch and gather results
      worstNegRankError = 0;
      worstPosRankError = 0;
      final int queryLen = trueRanks.length;
      if (useBulk) {
        final double[] estRanks = dskUT.getCDF(doubleQueryValues);
        for (int i = 0; i < queryLen; i++) {
          final double trueRank = (double) trueRanks[i] / streamLength;
          final double deltaRankErr = estRanks[i] - trueRank;
          if (deltaRankErr < 0) { worstNegRankError = Math.min(worstNegRankError, deltaRankErr); }
          else { worstPosRankError = Math.max(worstPosRankError, deltaRankErr); }
        }
      } else {
        for (int i = 0; i < queryLen; i++) {
          final double trueRank = (double) trueRanks[i] / streamLength;
          final double deltaRankErr = dskUT.getRank(i) - trueRank;
          if (deltaRankErr < 0) { worstNegRankError = Math.min(worstNegRankError, deltaRankErr); }
          else { worstPosRankError = Math.max(worstPosRankError, deltaRankErr); }
        }
      }
    }

    else { //use Float
      shuffle(inputFloatValues);
      // reset then update sketch
      fskUT.reset();
      for (int i = 0; i < inputFloatValues.length; i++) {
        fskUT.update(inputFloatValues[i]);
      }

      // query sketch and gather results
      worstNegRankError = 0;
      worstPosRankError = 0;
      final int qLen = trueRanks.length;
      if (useBulk) {
        final double[] estRanks = fskUT.getCDF(floatQueryValues);
        for (int i = 0; i < qLen; i++) {
          final double trueRank = (double) trueRanks[i] / streamLength;
          final double deltaRankErr = estRanks[i] - trueRank;
          if (deltaRankErr < 0) { worstNegRankError = Math.min(worstNegRankError, deltaRankErr); }
          else { worstPosRankError = Math.max(worstPosRankError, deltaRankErr); }
        }
      } else {
        for (int i = 0; i < qLen; i++) {
          final double trueRank = (double) trueRanks[i] / streamLength;
          final double deltaRankErr = fskUT.getRank(i) - trueRank;
          if (deltaRankErr < 0) { worstNegRankError = Math.min(worstNegRankError, deltaRankErr); }
          else { worstPosRankError = Math.max(worstPosRankError, deltaRankErr); }
        }
      }
    }
    return (worstPosRankError > -worstNegRankError) ? worstPosRankError : worstNegRankError;
  }