问题描述
在 python 中是否有测试浮点近似相等的函数?类似的,
Is there a function to test floating point approximate equality in python? Something like,
def approx_equal(a, b, tol): return abs(a - b) < tol
我的用例类似于 Google 的 C++ 测试库 gtest.h 定义 EXPECT_NEAR 的方式.
My use case is similar to how Google's C++ testing library, gtest.h, defines 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))
推荐答案
- 为了比较数字,有 math.isclose.
- 对于比较数字或数组,有 numpy.allclose.
- 对于测试数字或数组,有 numpy.testing.assert_allclose