Проверки на ошибки вычисления выражения

Пытаюсь создать программу для проверки на ошибки вычисления следующего выражения: введите сюда описание изображения

Моя неудачная попытка:

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

int main() {
    setlocale(0, "");
    float a, b, x;
    printf("Введите a,b,x:\n");
    scanf("%f%f%f", &a, &b, &x);
    if (x > b) {
            if (cosf(a * x) == 0.0f) {
                printf("error. tg = infinity");
            }
    }else if (x <= b){
            // Проблема тут
            if (cosf( sqrtf( fabs( pow(x, 2)))) == 0.0f) {
                printf("error. tg = infinity");
            }
    }

    printf("No errors");

    return 0;
}

Сделать проверку для x>b у меня получилось правильно, а вот для x<=b нет, по следующей причине:

Где проверка с учетом погрешности e надо проверять, чтобы модуль разности двух переменных был меньше погрешности. Никаких "==" не должно быть.

Я пытался разобраться несколько дней, но все тщетно. Что значит погрешность e и разность каких двух переменных я должен использовать?


Ответы (1 шт):

Автор решения: becouse

Это значит, что машинного нуля "нет" есть некое число, которое достоверно содержит некоторое количество нулей.

#define TOL 0.0000000000001

в коде

if fabs(x-y)<TOL ...
→ Ссылка