docs: protected static double computeH(DBIDRef ignore, DoubleDBIDListIter it, double[] p, double mbeta) {
      double sumP = 0.;
      // Skip point "i", break loop in two:
      it.seek(0);
      for(int j = 0; it.valid(); j++, it.advance()) {
        if(DBIDUtil.equal(ignore, it)) {
          p[j] = 0;
          continue;
        }
        sumP += (p[j] = FastMath.exp(it.doubleValue() * mbeta));
      }
      if(!(sumP > 0)) {
        // All pij are zero. Bad news.
        return Double.NEGATIVE_INFINITY;
      }
      final double s = 1. / sumP; // Scaling factor
      double sum = 0.;
      // While we could skip pi[i], it should be 0 anyway.
      it.seek(0);
      for(int j = 0; it.valid(); j++, it.advance()) {
        sum += it.doubleValue() * (p[j] *= s);
      }
      return FastMath.log(sumP) - mbeta * sum;
    }