Neil G - 1 year ago 135
Python Question

# Testing floating point equality

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`.
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download