helpers.go raw

   1  package hyperloglog
   2  
   3  import (
   4  	"math"
   5  )
   6  
   7  const two32 = 1 << 32
   8  
   9  func linearCounting(m uint32, v uint32) float64 {
  10  	fm := float64(m)
  11  	return fm * math.Log(fm/float64(v))
  12  }
  13  
  14  func clz56(x uint64) uint8 {
  15  	var c uint8
  16  	for m := uint64(1 << 55); m&x == 0 && m != 0; m >>= 1 {
  17  		c++
  18  	}
  19  	return c
  20  }
  21  
  22  func countZeros(s []uint8) uint32 {
  23  	var c uint32
  24  	for _, v := range s {
  25  		if v == 0 {
  26  			c++
  27  		}
  28  	}
  29  	return c
  30  }
  31