in hll/union.go [310:363]
func checkRebuildCurMinNumKxQ(sketch HllSketch) error {
sketchImpl := sketch.(*hllSketchState).sketch
curMode := sketch.GetCurMode()
tgtHllType := sketch.GetTgtHllType()
rebuild := sketchImpl.isRebuildCurMinNumKxQFlag()
if !rebuild || curMode != curModeHll || tgtHllType != TgtHllTypeHll8 {
return nil
}
sketchArrImpl := sketchImpl.(*hll8ArrayImpl)
curMin := 64
numAtCurMin := 0
kxq0 := float64(uint64(1 << sketch.GetLgConfigK()))
kxq1 := 0.0
itr := sketchArrImpl.iterator()
for itr.nextAll() {
v, err := itr.getValue()
if err != nil {
return err
}
if v > 0 {
if v < 32 {
inv, err := internal.InvPow2(v)
if err != nil {
return err
}
kxq0 += inv - 1.0
} else {
inv, err := internal.InvPow2(v)
if err != nil {
return err
}
kxq1 += inv - 1.0
}
}
if v > curMin {
continue
}
if v < curMin {
curMin = v
numAtCurMin = 1
} else {
numAtCurMin++
}
}
sketchArrImpl.putKxQ0(kxq0)
sketchArrImpl.putKxQ1(kxq1)
sketchArrImpl.putCurMin(curMin)
sketchArrImpl.putNumAtCurMin(numAtCurMin)
sketchArrImpl.putRebuildCurMinNumKxQFlag(false)
//HipAccum is not affected
return nil
}