3 回答
TA贡献1811条经验 获得超5个赞
为了比较数字,从Python 3.5开始math.isclose,按照PEP 485进行。
为了比较数字或数组,有numpy.allclose。
对于测试数字或数组,有 numpy.testing.assert_allclose
TA贡献1815条经验 获得超10个赞
另一种方法是计算两个数字的相对变化(或相对差异),“用于比较两个数量,同时考虑要比较的事物的'大小'”。Wikipedia文章中提到的两个公式可用于类似Python的以下比较中,它们还可以处理被比较的一个或两个值均为零的情况:
def approx_equal(a, b, tol):
return abs(a-b) <= max(abs(a), abs(b)) * tol
def approx_equal(a, b, tol):
return abs(a-b) <= (abs(a)+abs(b))/2 * tol
两种情况下的计算值都是无单位的分数。在第一种情况下,基线值是两个数字的最大绝对值,在第二种情况下,基线值是它们的平均绝对值。本文将更详细地讨论每一个,以及它们的优缺点。如果在比较之前乘以100(变为百分比值),则后者可能会变成百分比差异tol。请注意,该文章建议,如果变化的值“本身就是百分比,则最好使用百分比来谈论其变化”,即绝对变化。
这两种方法(显然)都比简单地取两个数之差的绝对值需要更多的计算,这可能是一个考虑因素。
TA贡献1875条经验 获得超3个赞
有功能可以在python中测试浮点近似相等吗?
因为定义取决于上下文,所以不能有函数。
def eq( a, b, eps=0.0001 ):
return abs(a - b) <= eps
并不总是有效。在某些情况下
def eq( a, b, eps=0.0001 ):
return abs( a - b ) / abs(a) <= eps
可能更合适。
另外,这里总是很受欢迎。
def eq( a, b, eps=0.0001 ):
return abs(math.log( a ) - math.log(b)) <= eps
哪个更合适。
我看不到如何要求一个(单个)函数将所有数学选择组合在一起。由于这取决于应用程序。
添加回答
举报