class HyperLogLog implements IRichCardinality {

    @Override
    public IRichCardinality merge(IRichCardinality... estimators) throws CardinalityMergeException {
        HyperLogLog merged = new HyperLogLog(log2m);
        merged.addAll(this);

        if (estimators == null) {
            return merged;
        }

        for (IRichCardinality estimator : estimators) {
            if (!(estimator instanceof HyperLogLog)) {
                throw new HyperLogLogMergeException("Cannot merge estimators of different class");
            }
            HyperLogLog hll = (HyperLogLog) estimator;
            merged.addAll(hll);
        }

        return merged;
    }

    public  HyperLogLog(double rsd);
    public  HyperLogLog(int log2m);
    public  HyperLogLog(int log2m, RegisterSet registerSet);

}