#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> using namespace std; double P[32], Q[32]; const double pi = acos(-1); #define eps 1e-6 void integral(double Q[]) { for (int i = 31; i >= 1; i--) Q[i] = Q[i-1] / (i); Q[0] = 0; } double calcVal(double Q[], double x) { double ret = 0; for (int i = 31; i >= 0; i--) ret = ret * x + Q[i]; return ret; } int main() { int testcase, cases = 0; int n, slices, stacks; double a, b; scanf("%d", &testcase); while (testcase--) { scanf("%d", &n); memset(P, 0, sizeof(P)); memset(Q, 0, sizeof(Q)); for (int i = n; i >= 0; i--) scanf("%lf", &P[i]); scanf("%lf %lf", &a, &b); scanf("%d %d", &slices, &stacks); for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) Q[i+j] += P[i] * P[j]; integral(Q); double trueVal = (calcVal(Q, b) - calcVal(Q, a)) * pi; double apprVal = 0; double dx = (b - a) / stacks, dtheta = 2 * pi / slices; for (double x = a; x + dx - eps <= b; x += dx) { double x1 = x, x2 = x + dx, x12; double fx1, fx2, S1, S2, fx12, S12; fx1 = calcVal(P, x1); fx2 = calcVal(P, x2); S1 = fx1 * fx1 * sin(dtheta) /2; S2 = fx2 * fx2 * sin(dtheta) /2; apprVal += dx * (S1 + S2 + sqrt(S1 * S2)) /3 * slices; } printf("Case %d: %.4lf\n", ++cases, fabs(trueVal - apprVal) * 100 / trueVal); } return 0; }
|