KDB 小数公差如何影响“in”运算符?

How does KDB decimal tolerance affect the `in` operator?

假设我有一个范围:

a: (0.005*til 13) - 0.03
-0.03 -0.025 -0.02 -0.015 -0.01 -0.005 0 0.005 0.01 0.015 0.02 0.025 0.03

当我执行 -0.01 in a 时,我得到了 0b,这是我没有预料到的。当我做 -0.015 in a 我得到 1b.

更奇怪的是,当我直接索引时:

-0.01 = a 4

我得到 1b

这里发生了什么?

此页面详细说明了哪些使用和不使用比较容差:https://code.kx.com/q/basics/precision/#use

一般来说,您永远不需要检查“float equals”或“float in”,它几乎总是以麻烦告终!如果必须,请使用一些接近度度量。

in 关键字在检查列表成员时不使用比较容差(回旋余地)(参见 https://code.kx.com/q/basics/precision/#:~:text=distinct%20except%20group%20in%20inter%20union%20xgroup)。

你可以看到当a这样定义时不会出现同样的问题:

q)a:-0.03 -0.025 -0.02 -0.015 -0.01 -0.005 0 0.005 0.01 0.015 0.02 0.025 0.03
q)-0.01 in a
1b

以您提供的方式生成的列表 a 给出的元素不完全是 -0.01,这就是 in returns 0b 的原因:

q)a: (0.005*til 13) - 0.03
q)-0.01 - a 4
-1.734723e-018