Does anyone know a good way in Python to check if a number is divisible by another in floating point in python?
The first thing I tried was ...
3.5 % 0.1 == 0.0
But this returns False
so then maybe
3.5 % 0.1 >= 1e-6
But also False
... bummer ... it turns out that
3.5 % 0.1
>> 0.099999999924
So then this works:
LAMBDA = 1e-9
def is_divisible_by(x, y):
m = x % y
dy = abs(y - m)
return m < LAMBDA or dy < LAMBDA
is_divisible_by(3.5, 0.1)
But this seems dangerous because I have to pick a LAMBDA. What about if y = LAMBDA / 2
...
is_divisible_by(LAMBDA/2, (LAMBDA/2) + 1e-10)
>>> True
So then
def is_divisible_by(x, y):
l = y * 1e-2
m = x % y
dy = abs(y - m)
return m < l or dy < l
is_divisible_by(3.5 * 1e-10, 0.1 * 1e-10)
>>> True
is_divisible_by(0.21, 0.211)
>>> True
Bummer.
Is there anyway to solve this without going down a massive rabbit hole?