Есть ли риск использования переменных с плавающей запятой в качестве счетчиков цикла и их дробного увеличения / уменьшения для условий, отличных от «==»?

Безопасно ли использовать поплавки в качестве счетчиков циклов и увеличивать / уменьшать их дробными величинами на каждой итерации, как в программе, которая на первый взгляд кажется безрисковой?== Оператор - глупая вещь. Но что?неправильно использовать поплавки в качестве операндов для других операций сравнения для "нормальный" Цели? От "нормальный" Я имею в виду, что, хотя поплавки не могут бытьточный числовое представление числа, но не 'т вариант как0.000000001 не имеет значения и может быть проигнорировано в большинстве случаев? (Например, в следующей программе, которая нет даже видно)

Но это сказал, вот мое опасение. Предположим, что представление неТочный и5.0 на самом деле4.999999. Так как мы продолжаем уменьшаться на0,5 на каждой итерации последнее сравнение с 0 может оказаться ложным, и цикл может выйти из-за разницы0.000001и последняя строка токового выхода не будет отображаться. Я надеюсь, что вы поняли мой дрейф. Насколько я не прав?

#include

int main(void)
{
float f;

for(f=5.0;f>=0;f-=0.5)
printf("%f\n",f);
}

Выход:

5.000000
4.500000
4.000000
3.500000
3.000000
2.500000
2.000000
1.500000
1.000000
0.500000
0.000000

Ответы на вопрос(4)

Ваш ответ на вопрос