#include <iostream>
#include <cmath>
#include <iomanip> // std::setprecision
double func(double x)
{
return x*cos(x)-2.0*cos(x)*cos(x)-2.0;
}
double derive(double x)
{
return cos(x)-x*sin(x)+2.0*sin(2.0*x);
}
int main()
{
double x=0.0; // initial x;
double lastx=x-0.1;
while(std::abs(x-lastx)>1e-10)
{
lastx=x;
x-=func(x)/derive(x);
}
std::cout<<"final x="<<std::setprecision(16)<<x<<std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb21hbmlwPiAgICAgIC8vIHN0ZDo6c2V0cHJlY2lzaW9uCgpkb3VibGUgZnVuYyhkb3VibGUgeCkKewoJcmV0dXJuIHgqY29zKHgpLTIuMCpjb3MoeCkqY29zKHgpLTIuMDsKfQoKZG91YmxlIGRlcml2ZShkb3VibGUgeCkKewoJcmV0dXJuIGNvcyh4KS14KnNpbih4KSsyLjAqc2luKDIuMCp4KTsKfQoKaW50IG1haW4oKQp7Cglkb3VibGUgeD0wLjA7IC8vIGluaXRpYWwgeDsKCWRvdWJsZSBsYXN0eD14LTAuMTsKCXdoaWxlKHN0ZDo6YWJzKHgtbGFzdHgpPjFlLTEwKQoJewoJCWxhc3R4PXg7CgkJeC09ZnVuYyh4KS9kZXJpdmUoeCk7Cgl9CglzdGQ6OmNvdXQ8PCJmaW5hbCB4PSI8PHN0ZDo6c2V0cHJlY2lzaW9uKDE2KTw8eDw8c3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=