docs: @Override
    public MeanVarianceMinMax put(double[] vals) {
      final int l = vals.length;
      if(l < 2) {
        if(l == 1) {
          put(vals[0]);
        }
        return this;
      }
      // First pass:
      double s1 = 0.;
      for(int i = 0; i < l; i++) {
        final double v = vals[i];
        s1 += v;
        min = v < min ? v : min;
        max = v > max ? v : max;
      }
      final double om1 = s1 / l;
      // Second pass:
      double om2 = 0., err = 0.;
      for(int i = 0; i < l; i++) {
        final double v = vals[i] - om1;
        om2 += v * v;
        err += v;
      }
      s1 += err;
      om2 += err / l;
      if(n <= 0) {
        n = l;
        sum = s1;
        m2 = om2;
        return this;
      }
      final double tmp = n * s1 - sum * l;
      final double oldn = n; // tmp copy
      n += l;
      sum += s1 + err;
      m2 += om2 + tmp * tmp / (l * n * oldn);
      return this;
    }