#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;

}