/********************************************************************/
/*   Jeff Balsley                                                   */
/*   Sat Dec 23 20:05:32 PST 2000                                   */
/*                                                                  */
/*   gcc -lm integrate.c -o integrate                               */
/********************************************************************/

#include <stdio.h>
#include <math.h>

double f(double x);
int main(void)
{
    double xstart, xstop;        /*  limits of integration  */
    double accuracy = 1e-10;    /*  accuracy of intergral  */
    double diff;                 
    double integral;             /*  value of integral      */
    double integral1;
    double value;
    int n;
    double deltax;
    double x1, x2;               
    double int_diff;

    printf("Please enter your limits of integration > ");
    scanf("%lf %lf", &xstart, &xstop);
    integral = (xstop - xstart) * (f(xstart) + f(xstop))/2;
    int_diff = 1;
    n = 3;
    while ( fabs(int_diff) > accuracy ){
	/* printf("%d ", n); */
	integral1 = 0;
	x1 = xstart;
	x2 = x1;
	while (x2 < xstop){
	    deltax = (xstop - xstart) / n;
	    x2 = x1 + deltax;
	    value = (f(x1) + f(x2))/2 * deltax;
	    integral1 = integral1 + value;
	    x1 = x2;
	}
	n = n + 1;
	int_diff = integral1 - integral;
	integral = integral1;
	/* printf("int_diff = %.12f\n", int_diff); */
	/* printf("integral = %.12f\n", integral); */
    }
    printf("%d ", n);
    printf("The Integral = %.14f.\n", integral);

    return(0);
}
    
double f(double x)
{
    return (x*x);
}
