code: func (h *HLLPP) Count() uint64 {
  	if h.sparse {
  		h.flushTmpSet()
  		return linearCounting(h.mp, h.mp-h.sparseLength)
  	}
  
  	var (
  		est      float64
  		numZeros uint32
  	)
  	for i := uint32(0); i < h.m; i++ {
  		reg := getRegister(h.data, h.bitsPerRegister, i)
  		est += 1.0 / float64(uint64(1)<<reg)
  		if reg == 0 {
  			numZeros++
  		}
  	}
  
  	if numZeros > 0 {
  		lc := linearCounting(h.m, numZeros)
  		if lc < threshold[h.p-4] {
  			return lc
  		}
  	}
  
  	est = alpha(h.m) * float64(h.m) * float64(h.m) / est
  
  	if est <= float64(h.m*5) {
  		est -= h.estimateBias(est)
  	}
  
  	return uint64(est + 0.5)
  }
docs: // Count returns the current cardinality estimate for h.