假设我有一个范围:
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)