Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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 (ну или после явного приведения)?


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: