#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double trapez(double(*f)(double), double a, double b, double eps)
{
double old_i = 0, new_i = old_i+2*eps;
for(unsigned int n = 1; abs(new_i-old_i) > eps; n *= 2)
{
old_i = new_i;
double h = (b-a)/n, s = -(f(a) + f(b))/2;
for(int i = 0; i <= n; ++i)
s += f(a + i*h);
new_i = s*h;
}
return new_i;
}
double y(double x) { return sin(x)*cos(x*x); }
int main(int argc, char * argv[])
{
cout << setprecision(10) << trapez(y,0,5,1e-10) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIHRyYXBleihkb3VibGUoKmYpKGRvdWJsZSksIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGVwcykKewogICAgZG91YmxlIG9sZF9pID0gMCwgbmV3X2kgPSBvbGRfaSsyKmVwczsKICAgIGZvcih1bnNpZ25lZCBpbnQgbiA9IDE7IGFicyhuZXdfaS1vbGRfaSkgPiBlcHM7IG4gKj0gMikKICAgIHsKICAgICAgICBvbGRfaSA9IG5ld19pOwogICAgICAgIGRvdWJsZSBoID0gKGItYSkvbiwgcyA9IC0oZihhKSArIGYoYikpLzI7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8PSBuOyArK2kpCiAgICAgICAgICAgIHMgKz0gZihhICsgaSpoKTsKICAgICAgICBuZXdfaSA9IHMqaDsKICAgIH0KICAgIHJldHVybiBuZXdfaTsKfQoKZG91YmxlIHkoZG91YmxlIHgpIHsgcmV0dXJuIHNpbih4KSpjb3MoeCp4KTsgfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCnsKICAgIGNvdXQgPDwgc2V0cHJlY2lzaW9uKDEwKSA8PCB0cmFwZXooeSwwLDUsMWUtMTApIDw8IGVuZGw7Cn0K