Neil G - 11 months ago 92

Python Question

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

My use case is similar to how Google's C++ testing library, gtest.h, defines

`EXPECT_NEAR`

Here is an example:

`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))

Answer Source

- For testing numbers, there are
`nose.tools.assert_almost_equal`

and equivalently`unittest.assertAlmostEqual`

- For testing numbers or arrays, there is
`numpy.testing.assert_allclose`

- For comparing numbers, there is
`math.isclose`

as per PEP 485 since Python 3.5. - For comparing numbers or arrays, there is
`numpy.allclose`

.