#include #include #define E 0.5 #define M 2.2 #define EPS 1e-15 double kepler(double x). double root(double f(double x), double a, double b); int main(void) { double x; x = root(kepler, -100.0, +100.0); printf("%s%.16f\n%s%.16f\n\n", "Approximate root: ", x, " Function value: ", kepler(x)); return 0; } double kepler(double x) { return (x - E * sin(x) - M); } double root(double f(double x), double a, double b) { double m = (a + b) / 2.0; /* mpoint */ 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); }