На этот вопрос уже есть ответ:
Всего 2 ответа
Упражнение предназначено, чтобы показать, что float
(и double
и т. Д., Числа с плавающей запятой в целом) не имеют точного десятичного значения, как то, что вы видите в тексте программы.
0.01
(десятичный) не может быть точно представлен в двоичном формате с плавающей запятой, поэтому умножение на 10 пять раз не даст ровно 100.0
.
См. Также: Примеры неточности с плавающей запятой
Вы не можете точно сказать, что произойдет с этим кодом, не зная деталей реализации с плавающей точкой на вашей платформе; стандарт C ++ оставляет это преднамеренно гибким.
По сути, 0.01
может быть приближением для ближайшего float
к этому double
литералу. Таким образом, условие остановки a < 1e2
может быть выполнено досрочно или иным образом.
Обратите внимание, что наряду с 0.01
, 1e1
является литералом типа double
.
Таким образом, преобразования в float
усложняют ситуацию. Тогда существует строгость с плавающей запятой.
Сократите длинную историю: не используйте плавучую точку как «индекс» в цикле.