2024-05-13 04:00:07 发布
网友
assert tlf.z >= tlb.z, (tlf.z,trf.z) AssertionError: (0.5, 0.5)
可以看出,我正遭受精度问题的困扰。如何重新措辞断言,使其传递足够接近的值(fudge因子应该有多大?)然后修复右弦,它应该比左弦更小,这样它就变得严格相等了吗?在
试试这个:
EPSILON = 10 ** -12 assert tlf.z >= tlb.z - EPSILON, (tlf.z,trf.z) tlf.z = max(tlf.z,tlb.z)
从本质上讲,你必须定义你对“大于或等于”的容忍度,并对其作出解释。在
为EPSILON选择什么价值是个难题。它取决于错误的来源,以及来源与比较之间的计算数量。如果计算很少,EPSILON的值越小越好。我会试试这个例子,如果你仍然发现问题,就调整一下。在
我认为威尔1给出的答案不正确。 让我解释一下。在
以下表达式:tlf.z >= tlb.z - EPSILON 相当于:(tlf.z > tlb.z - EPSILON) or (tlf.z == tlb.z - EPSILON)
tlf.z >= tlb.z - EPSILON
(tlf.z > tlb.z - EPSILON) or (tlf.z == tlb.z - EPSILON)
如果tlf.z > tlb.z为真,即使差小于EPSILON,那么{}也将为真。不管EPSILON值多少。正确的形式是:tlf.z > tlb.z + EPSILON 至于第二个表达式tlf.z == tlb.z - EPSILON,只有当tlf.z和{}完全不同于{}时,它才会被计算为true,这不是我们想要的。相反,我们希望它们之间的差异小于EPSILON:abs(tlf.z - tlb.z) <= EPSILON
tlf.z > tlb.z
tlf.z > tlb.z + EPSILON
tlf.z == tlb.z - EPSILON
tlf.z
EPSILON
abs(tlf.z - tlb.z) <= EPSILON
最后,tlf.z >= tlb.z - EPSILON应写成:(tlf.z > tlb.z + EPSILON) || (abs(tlf.z - tlb.z) <= EPSILON)
(tlf.z > tlb.z + EPSILON) || (abs(tlf.z - tlb.z) <= EPSILON)
更新: 我在看一些代码,突然发现(tlf.z > tlb.z + EPSILON) || (abs(tlf.z - tlb.z) <= EPSILON)实际上相当于tlf.z >= tlb.z - EPSILON。 当我们寻找相似性时,abs(tlf.z - tlb.z) <= EPSILON,我们希望tlb.z位于以下灰色区域: 当我们寻找tlf.z > tlb.z + EPSILON时: 因此,我们确实在寻找: 与tlf.z + EPSILON >= tlb.z(相当于tlf.z >= tlb.z - EPSILON)相同。 在这种情况下,willm1实际上是对的。对不起:)
tlb.z
tlf.z + EPSILON >= tlb.z
试试这个:
从本质上讲,你必须定义你对“大于或等于”的容忍度,并对其作出解释。在
为EPSILON选择什么价值是个难题。它取决于错误的来源,以及来源与比较之间的计算数量。如果计算很少,EPSILON的值越小越好。我会试试这个例子,如果你仍然发现问题,就调整一下。在
我认为威尔1给出的答案不正确。
让我解释一下。在
以下表达式:
tlf.z >= tlb.z - EPSILON
相当于:
(tlf.z > tlb.z - EPSILON) or (tlf.z == tlb.z - EPSILON)
如果}也将为真。不管EPSILON值多少。正确的形式是:
}完全不同于{}时,它才会被计算为true,这不是我们想要的。相反,我们希望它们之间的差异小于
tlf.z > tlb.z
为真,即使差小于EPSILON,那么{tlf.z > tlb.z + EPSILON
至于第二个表达式
tlf.z == tlb.z - EPSILON
,只有当tlf.z
和{EPSILON
:abs(tlf.z - tlb.z) <= EPSILON
最后,
tlf.z >= tlb.z - EPSILON
应写成:(tlf.z > tlb.z + EPSILON) || (abs(tlf.z - tlb.z) <= EPSILON)
更新:
我在看一些代码,突然发现
(tlf.z > tlb.z + EPSILON) || (abs(tlf.z - tlb.z) <= EPSILON)
实际上相当于tlf.z >= tlb.z - EPSILON
。当我们寻找相似性时,
abs(tlf.z - tlb.z) <= EPSILON
,我们希望tlb.z
位于以下灰色区域:当我们寻找
tlf.z > tlb.z + EPSILON
时:因此,我们确实在寻找:
与
tlf.z + EPSILON >= tlb.z
(相当于tlf.z >= tlb.z - EPSILON
)相同。在这种情况下,willm1实际上是对的。对不起:)
相关问题 更多 >
编程相关推荐