@skillfinder

Почему эта программа выполняется не совсем так, как я ожидал?

Приветсвую
Суть программы такова, что вводится 2 числа с плавающей точкой. Сценарий идет по нескольким путям - если одно число больше другого и если они равны. Если одно число меньше другого всего меньше чем на 0.01 - то выводится "Числа почти равны", вот мой код:

int main(){

    double val1, val2;

    while(cin >> val1 >> val2){
        if(val1 > val2)
            if(val1 - val2 < 0.01)
                cout << "Числа почти равны\n";
            else
                cout << "Наименьшее значение равно " << val2 << "\n"
                     << "Наибольшее значение равно " << val1 << "\n";
         else if(val1 < val2)
            if(val2 - val1 < 0.01)
                cout << "Числа почти равны\n";
            else
                cout << "Наименьшее значение равно " << val1 << "\n"
                     << "Наибольшее значение равно " << val2 << "\n";
         else
            cout << "Числа равны";
    }
    return 0;
}


В чем, собственно, мой вопрос? Если я ввожу в консоль 10.01 и 10.02 - выводится "Числа почти равны", хотя я указывал идти по этому пути только тогда, когда их разница меньше, чем 0.01. Я понимаю, если бы я сделал условие if(val1 - val2 <= 0.01), но мой код не содержит такой конструкции
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Из-за погрешностей округления, числа представляются в double не совсем как 10.01 и 10.02 - и вы получаете в качестве разности пограничный случай типа 0.99999999998
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы