Skip to content

Instantly share code, notes, and snippets.

@jiffyclub
Created June 7, 2012 21:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jiffyclub/2891755 to your computer and use it in GitHub Desktop.
Save jiffyclub/2891755 to your computer and use it in GitHub Desktop.
Test whether a value is within some range with some fuzziness at the edges to allow for floating point noise.
import numpy as np
def fuzzy_between(val, minval, maxval, fuzz=2, inclusive=True):
"""
Test whether a value is within some range with some fuzziness at the edges
to allow for floating point noise.
The fuzziness is implemented by expanding the range at each end `fuzz` steps
using the numpy.nextafter function. For example, with the inputs
minval = 1, maxval = 2, and fuzz = 2; the range would be expanded to
minval = 0.99999999999999978 and maxval = 2.0000000000000009 before doing
comparisons.
Parameters
----------
val : float
Value being tested.
minval : float
Lower bound of range. Must be lower than `maxval`.
maxval : float
Upper bound of range. Must be higher than `minval`.
fuzz : int, optional
Number of times to expand bounds using numpy.nextafter.
inclusive : bool, optional
Set whether endpoints are within the range.
Returns
-------
is_between : bool
True if `val` is between `minval` and `maxval`, False otherwise.
"""
# expand bounds
for _ in xrange(fuzz):
minval = np.nextafter(minval, minval - 1e6)
maxval = np.nextafter(maxval, maxval + 1e6)
if inclusive:
return minval <= val <= maxval
else:
return minval < val < maxval
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment