∫baf(x)dx≈b−a6[f(a)+4f(a+b2)+f(b)]
∫abf(x)dx≈b−a6[f(a)+4f(a+b2)+f(b)]
辛普森积分 ↑ 。
∫baf(x)dx≈b−a6[f(a)+4f(a+b2)+f(b)]
#include <bits/stdc++.h>
using namespace std;
const double efs = 1e-4;
double r;
double f (double x)
{
double res = sqrt (r * r - x * x);
return res;
}
double simpson (double a, double b)
{
double t = (a + b) / 2;
double res = (b - a) / 6 * (f (a) + 4 * f (t) + f (b) );
return res;
}
double cmp (double a, double b)
{
double t = (a + b) / 2;
double s0 = simpson (a, b);
double s1 = simpson (a, t);
double s2 = simpson (t, b);
if (abs (s1 + s2 - s0) <= efs) //满足精度条件
return s0;
else //递归
return cmp (a, t) + cmp (t, b);
//两边分别求值
}
int main()
{
double a, b;
scanf ("%lf%lf%lf", &r, &a, &b);
printf ("%.2f\n", cmp (a, f (b) ) - (f (b) - a) *b);
//(f (b) - a) *b 下方长方形面积
return 0;
}