∫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; }