计算积分(发散收敛)
试计算积分
保留至小数点后位。若积分发散,请输出 。
cpp
const double eps=1e-12;
double a;
double f(double x){
return pow(x,a/x-x);
}
double simpson(double l,double r,double sl,double sr){
double mid=(l+r)/2;
return (r-l)*(sl+4*f(mid)+sr)/6;
}
double asr(double l,double r,double s,double sl,double sr){
double mid=(l+r)/2;
double S=f(mid);
double left=simpson(l,mid,sl,S),right=simpson(mid,r,S,sr);
if(fabs(left+right-s)<eps)return left+right;
return asr(l,mid,left,sl,S)+asr(mid,r,right,S,sr);
}
void solve(){
cin>>a;
if(a<0)return cout<<"orz",void();
cout<<setprecision(5)<<fixed<<asr(eps,20,f((eps+20)/2),f(eps),f(20));
}