docs: private double calculateOverlapIncrease(N node, SpatialEntry ei, SpatialComparable testMBR) {
      ModifiableHyperBoundingBox eiMBR = new ModifiableHyperBoundingBox(ei);
      ModifiableHyperBoundingBox testMBRModifiable = new ModifiableHyperBoundingBox(testMBR);
  
      double[] lb = eiMBR.getMinRef();
      double[] ub = eiMBR.getMaxRef();
      double[] lbT = testMBRModifiable.getMinRef();
      double[] ubT = testMBRModifiable.getMaxRef();
      double[] lbNext = null; // next tested lower bounds
      double[] ubNext = null; // and upper bounds
      boolean[] dimensionChanged = new boolean[lb.length];
  
      for(int i = 0; i < dimensionChanged.length; i++) {
        if(lb[i] > lbT[i] || ub[i] < ubT[i]) {
          dimensionChanged[i] = true;
        }
      }
  
      double multiOverlapInc = 0, multiOverlapMult = 1, mOOld = 1, mONew = 1;
      double ol, olT; // dimensional overlap
      for(int j = 0; j < node.getNumEntries(); j++) {
        SpatialEntry ej = node.getEntry(j);
        if(getPageID(ej) != getPageID(ei)) {
          multiOverlapMult = 1; // is constant for a unchanged dimension
          mOOld = 1; // overlap for old MBR on changed dimensions
          mONew = 1; // overlap on new MBR on changed dimension
          ModifiableHyperBoundingBox ejMBR = new ModifiableHyperBoundingBox(ej);
          lbNext = ejMBR.getMinRef();
          ubNext = ejMBR.getMaxRef();
          for(int i = 0; i < dimensionChanged.length; i++) {
            if(dimensionChanged[i]) {
              if(lbT[i] > ubNext[i] || ubT[i] < lbNext[i]) {
                multiOverlapMult = 0;
                break; // old MBR has no overlap either
              }
              olT = (ubT[i] > ubNext[i] ? ubNext[i] : ubT[i]) - (lbT[i] < lbNext[i] ? lbNext[i] : lbT[i]);
              mONew *= olT;
              if(mOOld != 0) { // else: no use in calculating overlap
                ol = (ub[i] > ubNext[i] ? ubNext[i] : ub[i]) - (lb[i] < lbNext[i] ? lbNext[i] : lb[i]);
                if(ol < 0) {
                  ol = 0;
                }
                mOOld *= ol;
              }
            }
            else {
              if(lb[i] > ubNext[i] || ub[i] < lbNext[i]) {
                multiOverlapMult = 0;
                break;
              }
              ol = (ub[i] > ubNext[i] ? ubNext[i] : ub[i]) - (lb[i] < lbNext[i] ? lbNext[i] : lb[i]);
              multiOverlapMult *= ol;
            }
          }
          if(multiOverlapMult != 0) {
            multiOverlapInc += multiOverlapMult * (mONew - mOOld);
          }
        }
      }
      return multiOverlapInc;
    }