C ++ для упражнений цикла [duplicate]

На этот вопрос уже есть ответ:

Всего 2 ответа


Упражнение предназначено, чтобы показать, что floatdouble и т. Д., Числа с плавающей запятой в целом) не имеют точного десятичного значения, как то, что вы видите в тексте программы.

0.01 (десятичный) не может быть точно представлен в двоичном формате с плавающей запятой, поэтому умножение на 10 пять раз не даст ровно 100.0 .

См. Также: Примеры неточности с плавающей запятой


Вы не можете точно сказать, что произойдет с этим кодом, не зная деталей реализации с плавающей точкой на вашей платформе; стандарт C ++ оставляет это преднамеренно гибким.

По сути, 0.01 может быть приближением для ближайшего float к этому double литералу. Таким образом, условие остановки a < 1e2 может быть выполнено досрочно или иным образом.

Обратите внимание, что наряду с 0.01 , 1e1 является литералом типа double .

Таким образом, преобразования в float усложняют ситуацию. Тогда существует строгость с плавающей запятой.

Сократите длинную историю: не используйте плавучую точку как «индекс» в цикле.


Есть идеи?

10000