测试场景下浮点数比较的公式选型与公差设定原则咨询
测试场景下浮点数比较公式选择与公差设定的原则方法
浮点数比较函数的公式差异
Python标准库的math.isclose函数,等价逻辑为:
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
Numpy库提供的numpy.isclose和numpy.allclose函数,等价逻辑为:
abs(a - b) <= (atol + rtol * abs(b))
两类函数的官方文档均未说明公式选择的依据,也未给出设定合理**绝对公差(atol)和相对公差(rtol)**的原则性标准。
测试中的痛点
我在代码测试中经常用到这些函数,但始终没搞懂选择两种公式的原则,也不知道怎么根据场景设定合适的公差。平时我都是用默认值,只有明确存在数值精度损失时,才凭直觉手动调整公差直到结果“看起来合理”——这个过程既繁琐又不严谨,和软件测试(尤其是基于属性的测试)的目标完全相悖。
举个例子:我需要断言同一算法的两种不同实现产生“相同”结果,但直接用精确相等比较显然行不通。
问题
请问在测试场景下,选择浮点数比较公式与设定公差有哪些原则性方法?
内容的提问来源于stack exchange,提问作者shadowtalker
相关产品推荐
相关产品推荐

