|
|
●概要 階乗の演算は説明するまでもないが、以下の補助関数について解説する。
これらは、主として級数の収束予測を算出する場合に有意義となる。 ●階乗次数 Stirling の近似式によって算出している。近似式は、 N! ≒ NN*e-N*(2*π*N)1/2 であるが、この右辺の常用対数は、十進数の桁数に他ならない。つまり、桁数Dは、 D = Int(N * Log(N / e) + Log(2 * π * N) / 2) 内部で、Doubleによる組込み関数で算出している。実際にN! を算出し、その指数部を調べても同じであるが、Nが数万以上になれば、時間が掛かってしまうので、現実的ではない。本法では瞬時に求まる。 ●二重階乗次数 Stirling の近似式では直接解けないので、二重階乗を階乗に変形して解いている。 ○偶数 (2N)!! = 2N * N! であるから、次数は、 Log(2N * N!) = N * Log(2) + Log(N!) で、求められる。 ○奇数 (2N-1)!! = (2N)! / (2N)!! であるから、次数は、 Log((2N)! / (2N)!!) = Log((2N)!) - Log((2N)!!) で、求められる。 ●階乗項数 ○原理 次数は数式によって求められるが、その逆はそうは行かない。筆者は、当初、エクセルにてテーブルを作成し、テーブルの逆検索にて収束する項数を求めていたが、これは少々面倒くさい。 近似式を直接の逆関数にできないので、項数を、1 から、100万まで、100 刻み(テーブルサイズは、10001)で FactorialOrder にてテーブルを生成しておき、以下のようにテーブルにて検索する。テーブルは、例えば以下のように、FctT(0,k) が、項数、FctT(1,k) が、次数とする。
この方法は、k-1、k 間を補間するより正確に値を求められる。テーブルはフラグにより、一度生成すると、以降は生成しないようになっている。 <例> FactorialItem(700) ? 次数として、700 が与えられたとすれば、テーブルは、k =3、4 が選ばれ、項数初期値は、301 となる。FactorialOrder(301 + j) ≧ 700? を、j を、0 から 99 まで、インクリメントしながら演算し、最終的に、335 を得る。 ○確認 実際に関数を確認した。項数を与えて、先ず、FactorialOrder を算出し、その求まった次数にて、FactorialItem(次数)を算出したもの。項数 ≒ FactorialItem となれば、OK。実際には、一致しており、誤差はないようである。ユーティリティの機能として用意されている。
|