code: @Override
    public long valueAt(double probability) {
      int rangeFloor = floorIndex(probability);
  
      double segmentProbMin = getRankingAt(rangeFloor);
      double segmentProbMax = getRankingAt(rangeFloor + 1);
  
      long segmentMinValue = getDatumAt(rangeFloor);
      long segmentMaxValue = getDatumAt(rangeFloor + 1);
  
      // If this is zero, this object is based on an ill-formed cdf
      double segmentProbRange = segmentProbMax - segmentProbMin;
      long segmentDatumRange = segmentMaxValue - segmentMinValue;
  
      long result = (long) ((probability - segmentProbMin) / segmentProbRange * segmentDatumRange)
          + segmentMinValue;
  
      return result;
    }
docs: TODO This code assumes that the empirical minimum resp. maximum is the
  epistomological minimum resp. maximum. This is probably okay for the
  minimum, because that likely represents a task where everything went well,
  but for the maximum we may want to develop a way of extrapolating past the
  maximum.