31 lines
406 B
Go

package hyperloglog
import (
"math"
)
const two32 = 1 << 32
func linearCounting(m uint32, v uint32) float64 {
fm := float64(m)
return fm * math.Log(fm/float64(v))
}
func clz56(x uint64) uint8 {
var c uint8
for m := uint64(1 << 55); m&x == 0 && m != 0; m >>= 1 {
c++
}
return c
}
func countZeros(s []uint8) uint32 {
var c uint32
for _, v := range s {
if v == 0 {
c++
}
}
return c
}