名字很高大上,事实上是计算机与数学深度结合后诞生的一种算法。
求积分,我们知道一定存在一个函数,保证
事实上,我们并不需要其中微不足道的那部分,只需保证我们所需的精度即可
#include<bits/stdc++.h> #define int long double using namespace std; const int N=1e6+10; int a,b,c,d,l,r; int f(int x){ return (c*x+d)/(a*x+b); } int simpson(int l,int r){ int mid=(l+r)/2; return (r-l)*(f(l)+f(r)+4*f(mid))/6; } int adaptiveSimpson(int l,int r,int eps,int res,int dep){ double mid=(l+r)/2,L=simpson(l,mid),R=simpson(mid,r); if(abs(L+R-res)<=15*eps&&dep<0) return L+R+(L+R-res)/15; return adaptiveSimpson(l,mid,eps/2,L,dep-1)+ adaptiveSimpson(mid,r,eps/2,R,dep-1); } int calc(int l,int r,int eps){ return adaptiveSimpson(l,r,eps,simpson(l,r),12); } signed main(){ cin>>a>>b>>c>>d>>l>>r; printf("%.6Lf",calc(l,r,1e-6)); return 0; }