测试浮点相等

有功能可以在python中测试浮点近似相等吗?就像是,


 def approx_equal(a, b, tol):

     return abs(a - b) < tol

我的用例类似于Google的C ++测试库gtest.h的定义EXPECT_NEAR。


这是一个例子:


def bernoulli_fraction_to_angle(fraction):

    return math.asin(sqrt(fraction))

def bernoulli_angle_to_fraction(angle):

    return math.sin(angle) ** 2

def test_bernoulli_conversions():

    assert(approx_equal(bernoulli_angle_to_fraction(pi / 4), 0.5, 1e-4))

    assert(approx_equal(

              bernoulli_fraction_to_angle(bernoulli_angle_to_fraction(0.1)),

                0.1, 1e-4))


桃花长相依
浏览 326回答 3
3回答

四季花海

为了比较数字,从Python 3.5开始math.isclose,按照PEP 485进行。为了比较数字或数组,有numpy.allclose。对于测试数字或数组,有 numpy.testing.assert_allclose

动漫人物

另一种方法是计算两个数字的相对变化(或相对差异),“用于比较两个数量,同时考虑要比较的事物的'大小'”。Wikipedia文章中提到的两个公式可用于类似Python的以下比较中,它们还可以处理被比较的一个或两个值均为零的情况:def approx_equal(a, b, tol):&nbsp; &nbsp; return abs(a-b) <= max(abs(a), abs(b)) * toldef approx_equal(a, b, tol):&nbsp; &nbsp; return abs(a-b) <= (abs(a)+abs(b))/2 * tol两种情况下的计算值都是无单位的分数。在第一种情况下,基线值是两个数字的最大绝对值,在第二种情况下,基线值是它们的平均绝对值。本文将更详细地讨论每一个,以及它们的优缺点。如果在比较之前乘以100(变为百分比值),则后者可能会变成百分比差异tol。请注意,该文章建议,如果变化的值“本身就是百分比,则最好使用百分比来谈论其变化”,即绝对变化。这两种方法(显然)都比简单地取两个数之差的绝对值需要更多的计算,这可能是一个考虑因素。

翻过高山走不出你

有功能可以在python中测试浮点近似相等吗?因为定义取决于上下文,所以不能有函数。def eq( a, b, eps=0.0001 ):&nbsp; &nbsp; return abs(a - b) <= eps并不总是有效。在某些情况下def eq( a, b, eps=0.0001 ):&nbsp; &nbsp; &nbsp;return abs( a - b ) / abs(a) <= eps可能更合适。另外,这里总是很受欢迎。def eq( a, b, eps=0.0001 ):&nbsp; &nbsp; return abs(math.log( a ) - math.log(b)) <=&nbsp; eps哪个更合适。我看不到如何要求一个(单个)函数将所有数学选择组合在一起。由于这取决于应用程序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python