Azure Data Explorer中Kusto range查询未用均匀步长?输出是否正确?
Kusto Range 查询步长偏差问题说明
你观察到的非预期均匀步长输出是引擎正常计算的结果,不属于语法错误或者系统bug。
偏差产生的核心原因
- 本质是IEEE754双精度浮点数的固有表示限制:十进制数值0.2转换为二进制浮点数时是无限循环小数,无法被精确存储,实际参与计算的是和0.2差值小于1e-17的近似值。
- Kusto的
range算子生成序列的逻辑是从起始值开始,逐次叠加设定的步长值生成下一个序列项,每次计算引入的微小浮点误差会逐步累积,最终在序列两端的位置会出现和理论值极微小的偏差(比如接近-1的位置实际值为-1.0000000000000002,接近1的位置实际值为0.9999999999999998),这类偏差的量级远低于常规业务的精度要求。
对齐预期输出的调整方案
- 如果只需要规整的展示效果,可以在投影步骤对数值做固定精度的舍入处理,示例代码:
range x from -1 to 1 step 0.2 | project x = round(x, 1)
执行后即可得到-1.0、-0.8、-0.6直至1.0的标准等差序列输出。
- 如果对序列的精度有严格要求,可以改用整数步长生成序列后再做数值缩放,从根源避免浮点累加误差,示例代码:
range x_int from -5 to 5 step 1 | project x = todouble(x_int) / 5.0
内容的提问来源于stack exchange,提问作者Mathias Rönnlund
相关产品推荐
相关产品推荐

