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

Моя неудачная попытка:
#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; 1], а тангенс не обращается в бесконечность на этом отрезке, то не понятен смысл вашей проверки для случаяx <= b. – wololo Apr 17 '20 at 19:00cosf(a * x)в точности нулю. Не нужно так делать. Просто убедитесь, что выражениеcosf(a * x)отклоняется от нуля на величину меньшую, чем некоторый, заданный вамиeps. Например так:fabs( cosf(a * x) ) < eps. Сложно сказать наверняка, чему должен быть равенeps. В данном конкретном случае, попробуйте взятьepsнемного больший, чемstd::numeric_limits<float>::epsilon(), например,eps = 1e-5f. – wololo Apr 18 '20 at 08:27