/* Find a root of f() by the bisection method. */ #include #define EPS 1e-12 /* epsilon */ double p(double); double root(double (*)(double), double, double); int main(void) { double x; x = root(p, 0.0, 3.0); printf("%s%.16f\n%s%.16f\n", "Approximate root: ", x, " Function value: ", p(x)); return 0; } double p(double x) { return (x * x * x * x * x - 7.0 * x - 3.0); } double root(double f(double), double a, double b) { double m = (a + b) / 2.0; /* midpoint */ if (f(m) == 0.0 || b - a < EPS) return m; else if (f(a) * f(m) < 0.0) return root(f, a, m); else return root(f, m, b); }