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

cjm*_*671 1 kdb

假设我有一个范围:

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
Run Code Online (Sandbox Code Playgroud)

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

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

-0.01 = a 4
Run Code Online (Sandbox Code Playgroud)

我明白了1b

这里发生了什么事?

小智 5

检查列表成员资格时,关键字in不使用比较容差(回旋空间)(请参阅https://code.kx.com/q/basics/ precision/#:~:text=distinct%20 except%20group%20in%20inter% 20联盟%20x组)。

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
Run Code Online (Sandbox Code Playgroud)

以您提供的方式生成的列表a给出了一个不精确的元素-0.01,这就是inreturns的原因0b

q)a: (0.005*til 13) - 0.03
q)-0.01 - a 4
-1.734723e-018
Run Code Online (Sandbox Code Playgroud)