то есть сравнивают разность с определённым небольшим числом. Так делал и я.
Итак, надо было привести в движение деталь очередным шаговым двигателем. Переместиться на заданное расстояние fDistance. В связи с некоторыми особенностями алгоритмов размер перемещения периодически бывал равен нулю. В этих случаях никуда перемещаться было не надо, иначе возникали неожиданные последствия. То есть, если перемещение равно нулю, то команду надо было игнорировать.
Ну, я написал:
EPS я задал 0.0001, поскольку характерные значения минимальных настоящих перемещений были в районе 1.0 .
Во всех этих сравнениях есть один тонкий момент. На точное равенство с нулём на самом деле сравнивать МОЖНО, хотя и не нужно. Потому что сам ноль имеет в форматах float/double точное, а не приближённое представление. Если величина изначально задаётся нулём при инициализации, или через настроечный файл, то сравнения будут работать корректно. А вот если ноль является результатом вычислений, тут уже возникают проблемы.
Итак, ноль у меня являлся результатом вычислений, при которых сырые величины умножались на коэффициент преобразования, чтобы получились величины физические.
ОКАЗАЛОСЬ,
что нулевое перемещение после расчётов периодически оказывается равно 0.001, а это больше моего EPS. В результате команда Move вызывалась.
Пришлось поставить EPS==0.1.