Wanted: Gamma Function

っていうか, C++ 標準だとガンマ関数を計算するための関数が無いのではないかという恐ろしい事実に今気が付いた.TR1 にすら無いっ! TR1 でベータ関数云々導入されてるけれど,それ以前にまずガンマ関数はっ!?ねぇ,ガンマ関数はっ!? C99 にはあるんだけれどねぇ.
こうなると自作するしかないんだけれど,っていうかガンマ関数を求める精度で近似する方法誰か教えてぇ〜. Stirling の公式のもっと高次項まで展開したヤツ (ポアンカレの漸近展開)
\Gamma\left(x+1\right)\sim\sqrt{2\pi x}x^xe^{-x}\left[1+\frac{1}{12x}+\frac{1}{288x^2}-\frac{139}{51840x^3}\dots\right]
を使うっつーので良いのですかね?っていうか久しぶりに特殊函数の本引っ張り出してくる羽目になったんですけどっ!?っていうかこんなことに拘泥されている暇はないのだだだっ!うはー超幾何函数とかなっつかすぃーーー……いやそうじゃなくてっ!!
xがでかい場合 0verflow するので (でかいといってもガンマ関数自体階乗の速度で増加するのでxが2桁か3桁なうちぐらいに音を上げるだろうけれど) , \log{\Gamma(x)} なかたちで計算することになるんだろうけれど,っていうか C99 にはそのための関数 lgamma があるけれど.