07/11/14 19:14:44
>>492
#include <stdio.h>
#include <math.h>
double func1(double x)
{
return 1.0/x;
}
double simpson(double a, double b, int n, double (*func)(double))
{
double odd = 0, even = 0, h = (b - a)/n;
int i;
for(i = 1; i < n; i += 2)
odd += func(a + i*h);
for(i = 2; i < n; i += 2)
even += func(a + i*h);
return h/3.0*(func(a) + func(b) + 4*odd + 2*even);
}
int main(void)
{
int n;
for(n = 2; n <= 1024; n *= 2)
printf("%4d : %.8f\n", n, simpson(1.0, 2.0, n, (double (*)(double))func1));
return 0;
}