Witam. Jestem w trakcie pisania programu szukającego miejsca zerowe funkcji (z góry określonej). Mam jednak problem z metodą bisekcji. W pewnym momencie wartości a, b oraz x0 są sobie równe, przez co program wykonuje się nieskończoną ilość razy. Proszę o pomoc w odnalezieniu błędu.
Oto kod:
float f(float x)
{
return ((exp(-2*x)-3)-x);
}
void bisekcja(float a, float b, float eps)
{
float x0, f0, fa, fb;
fa=f(a);
fb=f(b);
if (fa*fb>0)
{
printf("Rownanie nie spelnia zalozen!\n");
}
else
{
while (fabs(a-b)>eps)
{
x0=(a+b)/2;
f0=f(x0);
if (fabs(f0)<eps)
{
break;
}
if ((fa*f0)<0)
{
b=x0;
/*fb=f0;*/
}
else {a=x0; /*fa=f0;*/}
printf("%f\n", x0);
}
printf ("Miejsce zerowe: %f\n", x0);
}
}