#include <iostream>
#include <cmath>
struct taylor_result {
int iterations;
double value;
double accu;
taylor_result() : iterations(0),value(0),accu(1) {}
};
taylor_result taylor(double x,double eps = 1e-8,taylor_result res = taylor_result()){
while(res.accu > eps){
res.value += res.accu;
res.iterations++;
res.accu *= (x / (res.iterations));
}
return res;
}
int main(){
double x = 3.0;
taylor_result res = taylor(3.0,0.1);
std::cout << res.value << "\n";
res = taylor(3.0,0.01,res);
std::cout << res.value << "\n";
res = taylor(3.0,0.001,res);
std::cout << res.value << "\n";
std::cout << exp(3.0) << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CgpzdHJ1Y3QgdGF5bG9yX3Jlc3VsdCB7CiAgICAgICAgaW50IGl0ZXJhdGlvbnM7CiAgICAgICAgZG91YmxlIHZhbHVlOwogICAgICAgIGRvdWJsZSBhY2N1OwogICAgICAgIHRheWxvcl9yZXN1bHQoKSA6IGl0ZXJhdGlvbnMoMCksdmFsdWUoMCksYWNjdSgxKSB7fQp9OwoKdGF5bG9yX3Jlc3VsdCB0YXlsb3IoZG91YmxlIHgsZG91YmxlIGVwcyA9IDFlLTgsdGF5bG9yX3Jlc3VsdCByZXMgPSB0YXlsb3JfcmVzdWx0KCkpewogICAgd2hpbGUocmVzLmFjY3UgPiBlcHMpewogICAgICAgICByZXMudmFsdWUgKz0gcmVzLmFjY3U7CiAgICAgICAgIHJlcy5pdGVyYXRpb25zKys7CiAgICAgICAgIHJlcy5hY2N1ICo9ICh4IC8gKHJlcy5pdGVyYXRpb25zKSk7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpewogICAgZG91YmxlIHggPSAzLjA7CiAgICB0YXlsb3JfcmVzdWx0IHJlcyA9IHRheWxvcigzLjAsMC4xKTsKICAgIHN0ZDo6Y291dCA8PCByZXMudmFsdWUgPDwgIlxuIjsKICAgIHJlcyA9IHRheWxvcigzLjAsMC4wMSxyZXMpOwogICAgc3RkOjpjb3V0IDw8IHJlcy52YWx1ZSA8PCAiXG4iOwogICAgcmVzID0gdGF5bG9yKDMuMCwwLjAwMSxyZXMpOwogICAgc3RkOjpjb3V0IDw8IHJlcy52YWx1ZSA8PCAiXG4iOwoKICAgIHN0ZDo6Y291dCA8PCBleHAoMy4wKSA8PCAiXG4iOwp9