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