Ранжирование не всех чисел float в arange

Есть функция:

f = 9.2
if f in arange(0, 180, 0.01):
    print(f)    

Числа 9.1, 9.3, 9.4, 9.5, 9.6, 9.8, 9.9 - попадают в ранжирование и выводится результат, а числа 9.2 и 9.7 - нет, функция завершается без ошибок но ничего не выводится. Такая же ситуация с числом 6.6 - хотя остальной диапазон от 6.1 и до 6.9 - в ранжирование попадает.

С чем это связано?


Ответы (1 шт):

Автор решения: MaxU

Это специфика хранения чисел с плавающей точкой в Python (Numpy):

In [109]: np.arange(9, 10, 0.01)[20]
Out[109]: 9.199999999999996

In [110]: np.arange(9, 10, 0.01)[20] == f
Out[110]: False

для этого в Numpy существует функция np.isclose():

In [111]: np.isclose(np.arange(9, 10, 0.01)[20], f)
Out[111]: True

или более уместное в вашем случае:

In [112]: np.isclose(f, np.arange(0, 180, 0.01)).any()
Out[112]: True
→ Ссылка