pytest.approx
的文档提到了rel
参数,但它没有明确define。
这会按预期返回
True
,
>>> a = 1e-6
>>> b = 2e-6
>>> a == approx(b, abs=1e-6) # returns True
但是这会返回
False
>>> a = 1e-6
>>> b = 2e-6
>>> a == approx(b, rel=1e-6) # returns False
这里为什么要有一个
rel
参数?它的用例是什么?
它是否将
b
与 rel
相乘并将其视为公差?
提前致谢
这方面的文档可能不清楚,并假设您已经知道什么是相对公差。从本质上讲,相对容差允许您在同一尺度上比较两个数量,无论它们是小还是大。这个公式是
|value - expected_value| / |expected_value|
,你可以在wikipedia上了解更多:
a == approx(b, rel) <-> |b - a| / |b| <= rel
左边的表达式等同于右边的表达式
但是,有一个复杂的问题:如果 b 等于 0,则不能除以 0,这会导致问题。为了解决这个问题,开发人员增加了另一个复杂性,导致以下表达式:
现在,如果你只传递一个
abs
参数(省略rel
),实际比较如下:
a == approx(b, rel, abs) <-> |b - a| <= max(|rel * b|, abs)
注意,如果
b=0
那么abs
用于断言差异。
最后,有一个特殊情况,当你只传递绝对差时,表达式如下:
a == approx(b, rel, abs) <-> |b - a| <= abs
文档实际上涵盖了这一点,但很难找到。希望这能为您阐明用途。