Сравнение вещественных чисел

Добрый вечер, имеется задача:
Даны вещественные числа A , B и C . Проверьте, выполняется ли равенство A + B = C .

Входные данные

Ввод содержит вещественные числа A , B и C ( - 100 ≤ A , B , C ≤ 100), заданные с 2 знаками после запятой.

Выходные данные

Если A + B = C , выведите YES, иначе выведите NO.
Мой исходный код такой:

#include <iostream>
#include <stdio.h>
#include <math.h>




int main() {
	double a;
	double b;
	double c;

	scanf("%lf%lf%lf", &a, &b, &c);
	double d = a + b;
	if (c == d) {
		printf("YES");
	}
	if (c != d) {
		printf("NO");
	}
}

Но при тестах выдает ошибку из-за неправильного сравнения вещественных чисел. Помогите пожалуйста исправить код. Заранее благодарю.

что именно выдает?

Для проверки программы используется сайт для практик, выдает следущее:
wrong answer тест 4
wrong answer причины:
• Решение вывело неверный ответ в указанном тесте.
• Файл не сохранён в среде разработки или на проверку отправлен ошибочный файл.
• Решение содержит неинициализированные переменные.
• Используется значение итерационной переменной после цикла for.

Так же рекомендации даны такие рекомендации к выполнению: Дробные числа нельзя сравнивать оператором ==. Вместо этого следует проверять условие |X - Y| ≤ ε, где ε — маленькая константа (например, 1e-9).
Именно меня интересует как соблюсти эту рекомендацию в коде.

Так в рекомендации ж всё написано?)

что-то типа

fabs(x - y) < 0.000000001
1 лайк

Спасибо большое!)

Не могли бы вы еще подсказать, куда именно мне вставить это условие в моем коде, что бы он верно работал?

Ну так разберитесь что оно делает.
Например, вычислив в уме или на листочке с какими-нибудь значениями x и y.

хорошо, спасибо

Вы, наверное, уже и самостоятельно разобрались с этим простым заданием,
но я всё же скину пример.

	if (fabs(c - (a + b)) < 0.000000001) { // если c равно a+b
		printf("YES");
	}
        else {  // если c не равно a+b
		printf("NO");
	}

обратите внимание, что я

  1. убрал переменную d, так как она нам нужна только один раз для сравнения с C
  2. убрал вторую проверку, ведь достаточно один раз проверить, равны или нет, раз не равны, то ИНАЧЕ - не равны.

Успехов в учёбе.

1 лайк

Да решил, но все равно спасибо за пояснения)