#include <iostream>
#include <math.h>
using namespace std;
const float pi = 3.141592f;
template<typename T>
float GetDerivative(T func, float val, float eps)
{
return (func(val + eps) - func(val)) / eps;
}
int main()
{
auto sinRad = [](float rad){return sin(rad);};
auto sinDeg = [](float deg){return sin(deg / 180.0f * pi);};
float eps = 1e-5f;
std::cout << "dsinRad(x)/dx|0 = " << GetDerivative(sinRad, 0.0f, eps) << "\n";
std::cout << "dsinDeg(x)/dx|0 = " << GetDerivative(sinDeg, 0.0f, eps) << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgZmxvYXQgcGkgPSAzLjE0MTU5MmY7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpmbG9hdCBHZXREZXJpdmF0aXZlKFQgZnVuYywgZmxvYXQgdmFsLCBmbG9hdCBlcHMpCnsKCXJldHVybiAoZnVuYyh2YWwgKyBlcHMpIC0gZnVuYyh2YWwpKSAvIGVwczsKfQoKaW50IG1haW4oKQp7CglhdXRvIHNpblJhZCA9IFtdKGZsb2F0IHJhZCl7cmV0dXJuIHNpbihyYWQpO307CglhdXRvIHNpbkRlZyA9IFtdKGZsb2F0IGRlZyl7cmV0dXJuIHNpbihkZWcgLyAxODAuMGYgKiBwaSk7fTsKCQoJZmxvYXQgZXBzID0gMWUtNWY7CglzdGQ6OmNvdXQgPDwgImRzaW5SYWQoeCkvZHh8MCA9ICIgPDwgR2V0RGVyaXZhdGl2ZShzaW5SYWQsIDAuMGYsIGVwcykgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCAiZHNpbkRlZyh4KS9keHwwID0gIiA8PCBHZXREZXJpdmF0aXZlKHNpbkRlZywgMC4wZiwgZXBzKSA8PCAiXG4iOwoJcmV0dXJuIDA7Cn0=