Can anyone explain the rationale for numpy's allclose() semantics? help(allclose) says:
allclose(a, b, rtol=1e-05, atol=1e-08) Returns True if two arrays are element-wise equal within a tolerance. The tolerance values are positive, typically very small numbers. The relative difference (`rtol` * abs(`b`)) and the absolute difference `atol` are added together to compare against the absolute difference between `a` and `b`. [...] If the following equation is element-wise True, then allclose returns True. absolute(`a` - `b`) <= (`atol` + `rtol` * absolute(`b`)) I don't understand why they add the error tolerances together. I can understand taking the minimum, or the maximum: * taking the maximum is equivalent to the rule "numbers are close if they differ by no more than EITHER the absolute tolerance OR the relative tolerance"; * taking the minimum is equivalent to the rule "numbers are close if they differ by no more than BOTH the absolute tolerance AND the relative tolerance". But adding them together doesn't make any sense to me. That leads to the situation where two values are deemed "close" if you give two tolerances even though it fails each test individually: py> numpy.allclose([1.2], [1.0], 0.0, 0.1) # Fails absolute error test. False py> numpy.allclose([1.2], [1.0], 0.1, 0.0) # Fails relative error test. False py> numpy.allclose([1.2], [1.0], 0.1, 0.1) # Passes! True -- Steven -- https://mail.python.org/mailman/listinfo/python-list