Автор: Mr.Jeweller (27.09.2010 в 15:07)
Здравствуйте, участники форума!
Изучая С++ прочитал следующие строки:
Многие десятичные значения не могут быть представлены точно в двоичной форме с плавающей точкой, поэтому в аккумулируемых значениях может накапливаться погрешность. Это значит, что вы не должны кодировать цикл for так, чтобы его завершение зависело от достижения счетчиком с плавающей точкой точного значения. Например, следующий неправильно спроектированный цикл никогда не завершится:
for(double x = 0.0; x != 1.0; x += 0.2)
cout << x;
|
Становится как-то не по себе от такой информации.
Я написал вот такой небольшой код:
#include <iostream>
using std::endl;
using std::cout;
using std::cin;
int main()
{
double number = 0.0;
double sum = 0.0;
for(;;)
{
cout << endl << "Enter number (for exit enter 0): ";
cin >> number;
if(number == 0)
break;
sum += number;
}
cout << endl << "Sum = " << sum << endl;
return 0;
}
|
...и вспомнил об вышеизложенном предупреждении и немного засомневался в понимании правильности написанного мною условия if.
Объясню почему:
Если в двоичной форме тип double не может быть представлен точно, то возможна ли погрешность в представлении значения "0.0"? Будет ли выполняться равенство 0.0 == 0 после того как компилятор приведет тип int нуля к типу double (ну или после явного приведения)?