存个模板。
luogu4525
计算积分。结果保留至小数点后6位。
double a,b,c,d,l,r;
inline double f(double x) //原函数
{
return (c*x+d)/(a*x+b);
}
inline double simpson(double l,double r) //Simpson公式
{
double mid=(l+r)/2;
return (f(l)+4*f(mid)+f(r))*(r-l)/6;
}
double asr(double l,double r,double eps,double ans)
{
double mid=(l+r)/2;
double l_=simpson(l,mid),r_=simpson(mid,r);
if(fabs(l_+r_-ans)<=15*eps) return l_+r_+(l_+r_-ans)/15; //确认精度
return asr(l,mid,eps/2,l_)+asr(mid,r,eps/2,r_); //精度不够则递归调用
}
inline double asr(double l,double r,double eps)
{
return asr(l,r,eps,simpson(l,r));
}
int main()
{
scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&l,&r);
printf("%.6lf",asr(l,r,1e-6));
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!