assert tlf.z >= tlb.z, (tlf.z,trf.z)
AssertionError: (0.5, 0.5)

可以看出,我正遭受着精确性问题的困扰。我如何重新表述断言以便它传递足够接近的值(fudge因子应该有多大?)然后修正rhs,它是否真的比lhs小,这样它就完全相等了?

最佳答案

试试这个:

EPSILON = 10 ** -12
assert tlf.z >= tlb.z - EPSILON, (tlf.z,trf.z)
tlf.z = max(tlf.z,tlb.z)

从本质上说,你必须定义你愿意对“大于或等于”的容忍度,并对此作出解释。
为EPSILON选择什么值是一个困难的问题。这取决于错误的来源,以及该来源与比较之间的计算次数。如果几乎没有计算,一个小点的EPSILON值是个不错的选择。我会尝试这个例子,如果你仍然发现问题,我会调整。

10-07 19:08