#include <stdio.h>
float f(float x);
void search(float xn, float xx, float dx, float tol, float (*f)(float));
float secant(float x1, float x2,
float tol, float (*f)(float));
main()
{
float x1, x2, dx, tol;
x1 = -2.0;
x2 = 2.0;
dx
= 0.125;
tol
= 5.e-5;
search(x1, x2, dx, tol, f);
return 0;
}
void search(float xn, float xx, float dx, float tol, float (*f)(float))
{
float x1, x2;
x1 = xn;
do {
x2 = x1 + dx;
if (f(x1) * f(x2)
< 0.0)
printf("a root is %8.5f\n", secant(x1, x2, tol, f));
x1 = x2;
} while (x1 < xx);
}
float f(float x)
{
return
x*(x*x-3.0)+1.0;
}