Ранжирование не всех чисел 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