func checkRebuildCurMinNumKxQ()

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
}