#c
Вопрос:
Недавно я начал изучать C , и у меня возник вопрос относительно синтаксиса упражнения, данного в нашей лекции о точности, когда мы объявляем разные типы переменных, в данном случае float
и double
.
#include <iostream>
using namespace std ;
int main()
{
// Accuracy test with float
float eps_f = 1.0 ;
while (float(1.0 eps_f) != 1.0)
eps_f /= 2.0 ;
cout << "Resolving capacity float approximately: " << 2*eps_f << endl ;
// Accuracy test with double
double eps_d = 1.0 ;
while (1.0 eps_d != 1.0)
eps_d /= 2.0 ;
cout << "Resolving capacity double approximately : " << 2*eps_d << endl ;
}
Итак, чего я не понимаю, так это в чем смысл пребывания здесь? Что происходит?
Комментарии:
1. Вот почему правильный отступ и/или использование фигурных скобок так важны для написания читаемого кода. Например: второй цикл
while (1.0 eps_d != 1.0) { eps_d /= 2.0; }
2. Я откатил редактирование, так как форматирование является частью проблемы здесь, как показали ответы.
Ответ №1:
В C отступ не влияет на поток программы, но влияет на читаемость.
Это может быть лучше написано как:
#include <iostream>
using namespace std ;
int main()
{
// Accuracy test with float
float eps_f = 1.0 ;
while (float(1.0 eps_f) != 1.0)
{
eps_f /= 2.0 ;
}
cout << "Resolving capacity float approximately: " << 2*eps_f << endl ;
// Accuracy test with double
double eps_d = 1.0 ;
while (1.0 eps_d != 1.0)
{
eps_d /= 2.0 ;
}
cout << "Resolving capacity double approximately : " << 2*eps_d << endl ;
}
Цикл while будет работать со следующим оператором. Если используются фигурные скобки, он будет рассматривать блок, заключенный в фигурные скобки, как инструкцию. В противном случае он будет использовать только следующую инструкцию.
Следующие фрагменты кода идентичны:
while(1)
{
do_stuff();
}
do_other_stuff();
while(1) do_stuff(); do_other_stuff();
while(1)
do_stuff();
do_other_stuff();
Комментарии:
1. Хотя ваш пример кода с отступом верен, написание
//end while
-плохая практика кодирования.2. Спасибо за комментарий. Я больше использовал его как попытку продемонстрировать синтаксис блока. Я пошел дальше и удалил их.
Ответ №2:
Отступ имеет значение!
Вот фрагмент, переписанный заново путем добавления разумного отступа:
while (float(1.0 eps_f) != 1.0)
eps_f /= 2.0;
Теперь ясно, что цикл while выполняется до тех пор, пока сумма 1.0
и eps_f
не станет 1.0
— это означает, что eps_f
она стала настолько мала, что математика с плавающей запятой не может ее учесть.
То же изменение может быть применено ко второму while
фрагменту с помощью double.
Комментарии:
1. » Отступ имеет значение! «- только для читателей-людей, а не для составителя
2. @RemyLebeau ну, человеческие читатели тоже имеют значение!