#include <iostream>
#include <cmath>
using namespace std;
double up = 19.0 + (61.0/125.0);
double down = -32.0 - (2.0/3.0);
double rectangle = (up - down) * 8.0;
double f(double x) {
return (pow(x, 4.0)/500.0) - (pow(x, 2.0)/200.0) - 0.012;
}
double g(double x) {
return -(pow(x, 3.0)/30.0) + (x/20.0) + (1.0/6.0);
}
double area_upper(double x, double step) {
return (((up - f(x)) + (up - f(x + step))) * step) / 2.0;
}
double area_lower(double x, double step) {
return (((g(x) - down) + (g(x + step) - down)) * step) / 2.0;
}
double area(double x, double step) {
return area_upper(x, step) + area_lower(x, step);
}
int main() {
double current = 0, last = 0, step = 1.0;
do {
last = current;
step /= 10.0;
current = 0;
for(double x = 2.0; x < 10.0; x += step) current += area(x, step);
current = rectangle - current;
current = round(current * 1000.0) / 1000.0;
cout << current << endl; //<-- COMMENT BACK IN TO "FIX" BUG
} while(current != last);
cout << current << endl;
return 0;
}
CgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjbWF0aD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgdXAgPSAxOS4wICsgKDYxLjAvMTI1LjApOwpkb3VibGUgZG93biA9IC0zMi4wIC0gKDIuMC8zLjApOwpkb3VibGUgcmVjdGFuZ2xlID0gKHVwIC0gZG93bikgKiA4LjA7Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIChwb3coeCwgNC4wKS81MDAuMCkgLSAocG93KHgsIDIuMCkvMjAwLjApIC0gMC4wMTI7Cn0KCmRvdWJsZSBnKGRvdWJsZSB4KSB7CiAgICByZXR1cm4gLShwb3coeCwgMy4wKS8zMC4wKSArICh4LzIwLjApICsgKDEuMC82LjApOwp9Cgpkb3VibGUgYXJlYV91cHBlcihkb3VibGUgeCwgZG91YmxlIHN0ZXApIHsKICAgIHJldHVybiAoKCh1cCAtIGYoeCkpICsgKHVwIC0gZih4ICsgc3RlcCkpKSAqIHN0ZXApIC8gMi4wOwp9Cgpkb3VibGUgYXJlYV9sb3dlcihkb3VibGUgeCwgZG91YmxlIHN0ZXApIHsKICAgIHJldHVybiAoKChnKHgpIC0gZG93bikgKyAoZyh4ICsgc3RlcCkgLSBkb3duKSkgKiBzdGVwKSAvIDIuMDsKfQoKZG91YmxlIGFyZWEoZG91YmxlIHgsIGRvdWJsZSBzdGVwKSB7CiAgICByZXR1cm4gYXJlYV91cHBlcih4LCBzdGVwKSArIGFyZWFfbG93ZXIoeCwgc3RlcCk7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIGN1cnJlbnQgPSAwLCBsYXN0ID0gMCwgc3RlcCA9IDEuMDsKCiAgICBkbyB7CiAgICAgICAgbGFzdCA9IGN1cnJlbnQ7CiAgICAgICAgc3RlcCAvPSAxMC4wOwogICAgICAgIGN1cnJlbnQgPSAwOwoKICAgICAgICBmb3IoZG91YmxlIHggPSAyLjA7IHggPCAxMC4wOyB4ICs9IHN0ZXApIGN1cnJlbnQgKz0gYXJlYSh4LCBzdGVwKTsKCiAgICAgICAgY3VycmVudCA9IHJlY3RhbmdsZSAtIGN1cnJlbnQ7CiAgICAgICAgY3VycmVudCA9IHJvdW5kKGN1cnJlbnQgKiAxMDAwLjApIC8gMTAwMC4wOwogICAgICAgIGNvdXQgPDwgY3VycmVudCA8PCBlbmRsOyAvLzwtLSBDT01NRU5UIEJBQ0sgSU4gVE8gIkZJWCIgQlVHCiAgICB9IHdoaWxlKGN1cnJlbnQgIT0gbGFzdCk7CgogICAgY291dCA8PCBjdXJyZW50IDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQog