Если я удалю while
и выберите одно условие в if, else if, else
, я могу получить результат. Но когда я добавляю циркуляцию while
в решение функции, происходит бесконечный цикл. Пожалуйста, выясните, где проблема?Что не так с этим тиражом?
#include<stdio.h>
#include<math.h>
int a, b, c, d;
float fun(float x);
float solve(void);
int main()
{
printf("Put in the coefficient of the equation:\n");
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
scanf("%d", &d);
float ans = solve();
printf("A solve for the equation:x=%.3f", ans);
return 0;
}
float fun(float x)
{
float value = a * x * x * x + b * x * x + c * x + d;
return value;
}
float solve(void)
{
float x1 = -100, x2 = 100, x3;
float diff = fabs(fun(x1) - fun(x2));
while (diff > 0.001)
{
x3 = (x1 * fun(x2) - x2 * fun(x1))/(fun(x2) - fun(x1));
if (fun(x3) == 0)
{
x1 = x3;
x2 = x3;
}
else if ((fun(x3) * fun(x1)) < 0)
{
x2 = x3;
}
else
{
x1 = x3;
}
diff = fabs(fun(x1) - fun(x2));
}
return diff;
}
Почему вы отметили это как C++? –
Вы уже пробовали распечатать значение 'diff' в конце каждого цикла? – JVApen
Равенство в числах с плавающей запятой не является хорошей идеей - см. [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –