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
}