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