#include #include template struct Sine { static inline double sin() { double Rsqr = R * R; return R * ( 1.0 - Rsqr / 2.0 / 3.0 * ( 1.0 - Rsqr / 4.0 / 5.0 * ( 1.0 - Rsqr / 6.0 / 7.0 * ( 1.0 - Rsqr / 8.0 / 9.0 * ( 1.0 - Rsqr / 10.0 / 11.0 * ( 1.0 - Rsqr / 12.0 / 13.0 * ( 1.0 - Rsqr / 14.0 / 15.0 * ( 1.0 - Rsqr / 16.0 / 17.0 * ( 1.0 - Rsqr / 18.0 / 19.0 * ( 1.0 - Rsqr / 20.0 / 21.0 ) ) ) ) ) ) ) ) ) ); } }; #define SineT(r) Sine::sin() int main(void) { std::cout << sin(10.5) << std::endl; std::cout << SineT(10.5) << std::endl; }