Given: a function f, an interval [a,b], a tolerance epsilon Variables: L, the left endpoint of the current interval M, the midpoint of the current interval R, the right endpoint of the current interval L <- a R <- b if f(L) and f(R) have the same sign, then exit with error message while R - L > epsilon: M <- (L+R)/2; # compute midpoint if f(L) and f(M) have opposite signs, then set current interval to [L,M] otherwise, set current interval to [M,R]
Below is an incomplete version of the program. Where you see "...", program text has been deleted. Note the way doubles are formatted for scanf. Note also the way the exit function is used. Note also the use of a very simple function, f(x) = x^3 - 27, for testing purposes.
#include <stdio.h> /* use for the "exit" function */ #include <stdlib.h> double f( double x){ return x*x*x - 27.0; } main(){ double a, b, L, M, R, epsilon; printf(" Enter a: "); scanf( "%le", &a ); printf(" Enter b: "); scanf( "%le", &b ); printf(" Enter epsilon: "); scanf( "%lf", &epsilon ); printf(" [%lf,%lf], epsilon = %lf\n", a, b, epsilon ); L = a; R = b; if ( f(a)*f(b) > 0 ) { printf(" No sign change ... exit!\n"); exit(1); } while( ... ) { .... .... } printf(" [%lf,%lf]\n", L,R ); } }