我从清华大学郑莉的C++语言程序设计中得到的算法是:
double Trapz::operator()(double a,double b,double eps) const //a,b是积分上下限,eps是精度
{
//变步长算定积分,每次步长变为上次的一半
bool done=false;
int n=1;
double h=b-a;
double tn=h*(f(a)+f(b))/2;
double t2n;
do
{
double sum=0;
for(int k=0;k<n;k++)
{
double x=a+(k+0.5)*h;
sum+