自适应辛普森积分法
https://www.cnblogs.com/pks-t/p/10277958.html
#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline int read()
{
char x='\0';
int fh=1,sum=0;
for(x=getchar();x<'0'||x>'9';x=getchar())if(x=='-')fh=-1;
for(;x>='0'&&x<='9';x=getchar())sum=sum*10+x-'0';
return fh*sum;
}
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)
{
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 lans=simpson(l,mid),rans=simpson(mid,r);
if(fabs(lans+rans-ans)<=15*eps)return lans+rans+(lans+rans-ans)/15;
return asr(l,mid,eps/2,lans)+asr(mid,r,eps/2,rans);
}
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;
}