#include #include double f(double x); double S(double a, double b, int m); double f(double x) { return pow(exp(1.0), -x*x); } double S(double a, double b, int m) { double step = (b-a) / m; double ans = 0; int i = 0; for (i = 0; i < m; i++) { ans += step * (f(a + step * i) + f(a + step * (i + 1))) / 2; } return ans; } int main() { double a, b; int m; double bestResult; double lowerBond, upperBond; bestResult = S(-1, 1, 2000); printf("The best result we get is %.10lf\n", bestResult); lowerBond = ((int)(bestResult * 10000)) / 10000.0; upperBond = lowerBond + 0.0001; for (m = 1; m <= 2000; m++) { if (S(-1, 1, m) >= lowerBond && S(-1,1,m) < upperBond) { printf("Now the first m that satisfies the requirment is %d, the result is %.10lf.", m, S(-1,1,m)); break; } } return 0; }