// Build don't link: const double M_PI=3.14159265358979323846; template<int N,int I,int J,int K> inline double SineSeries() { const double x=I*2*M_PI/N; const bool go=K+1!=J; return 1.0-x*x/(2*K+2)/(2*K+3)*SineSeries<N*go,I*go,J*go,(K+1)*go>(); } template<> inline double SineSeries<0,0,0,0>() { return 1.0; } template<int N,int I> inline double Sine() { const double x=(I*2*M_PI/N); return x * SineSeries<N,I,10,0>(); } int main() { double f=Sine<32,5>(); return 0; }