ついでにsin

ついでにsinも求めてみた。それだけ

template<int x>
inline const double get_sin()
{
	const double y = 0.00000001*x;
	return y
		 - y*y*y/Factorial<3>::val
		 + y*y*y*y*y/Factorial<5>::val
		 - y*y*y*y*y * y*y/Factorial<7>::val
		 + y*y*y*y*y * y*y*y*y/Factorial<9>::val
		 - y*y*y*y*y * y*y*y*y*y * y*y/Factorial<12>::val;
}

オーバーフローを防ぐために

template<>
struct Factorial<8>
{
      enum{val = 8*7*6*5*4*3*2};
};

みたいなのをつくってみたけれど一緒だった(40320でも一緒の結果)。多分int幅を超えてしまったのだろう・・・・。よってメタプログラミングで12よりも大きな階乗は私の力では求めることは不可能だった(:D)rz