扩展库 / hyperloglog
hyperloglog
固定内存的近似去重计数。
复用 XRT 64 位哈希,支持同精度合并、清空及显式二进制长度;估计值不保证精确。
API
| 成员 | 用途 |
|---|---|
create(precision = 14) | 创建 4..18 精度的草图 |
hyperloglog.HyperLogLog | 导出草图类型,可用于显式声明和函数签名 |
add / count | 加入数据并估计唯一值数量 |
merge / clear | 同精度合并与复位 |
added / precision | 读取累计写入计数与寄存器精度;重复合并会再次累加源计数,计数在 int64 上限饱和 |
xlang
import hyperloglog
hyperloglog.HyperLogLog hll = hyperloglog.create()
hll.add("visitor:1")
hll.add("visitor:2")
auto nextDay = hyperloglog.create()
nextDay.add("visitor:3")
hll.merge(nextDay)
println(hll.count()) // 近似值,不是精确集合大小
hll.clear()
单实例没有并发锁;误差性质、C 接口、测试范围与 AOT 状态见包内 README。
2026-10-30 新增15种精度的构造哈希位向量、整数有理数参照、大值/饱和与逐寄存器合并测试,五个破坏副本均拒绝;这些合成输入不是实际数据误差保证。C/XLang预热普通操作零额外分配、八个生成原型、新旧双语输出和两平台七条普通独立程序通过,Linux含sanitizer。新shard_union范例明确区分已知并集2000、估计1993和输入调用数;三份原顶层正例仍在AOT退出期失败,M2开放,默认门禁完整留档但不签收整包。算法/ABI未改。
C API 失败后可直接重试,成功调用会清除本线程旧的 XRT 错误。count/added 使用跨平台 int64_t 结果,add 长度仍为 C long long。C 范例可直接 xl run release/extlibs/hyperloglog/examples/hyperloglog_c.c;双平台 JIT 与固定输出、Windows 核心和公开范例 AOT 已通过。当前 Windows/Linux 独立 EXE 的顶层对象边界在打印 PASS 后于退出清理期报错,整包尚未发布签收;复现与修复边界见包内 README。估计值不是精确基数。