|
対数関数は、自然対数が重要となるが、この級数展開には数種類存在する。対象となる数値 x の範囲によって、展開式の形が異なっている。いずれにしても、級数の収束速度1で述べたように、自分の目的にあった式を適用する。ここでは、x が1前後のものと、x > 0 のものを比較し、どちらが有利かを調べる。 ●原理 ○二つの展開式 1. ln(x) = (-1)(k+1) * (x - 1)k / k [k = 1 to ∞][0 < x ≦ 2] 2. ln(x) = 2 * ((x - 1)/(x + 1))(2*k-1) /(2*k-1) [k = 1 to ∞][0 < x ] ○準備 1式を適用するには、任意の正の x を 2 以下に変換する必要がある。以下のようにして行う。対象のxは、指数表現では、 x = M * 10P となる。ここで、Mは、1 ≦ M < 10 である。まだ条件を満たさないので、 x = (M /10) * 10(P + 1) = m * 10(P + 1) と変形すると、0.1 ≦ m < 1 となる。しかるに、 ln(x) = ln(m * 10(P + 1)) = ln(m) + (P + 1) * ln(10) であるから、結局、 ln(m) を求めれば良いことになるが、1式も2式も適用できるので、比較ができることになる。 ●実験1(机上) ここでは、式による収束程度を実際の数値を適用して算出してみる。 m の範囲は、0 超過、1未満となるので、0.1 〜 0.9 として、(x - 1)k と、((x - 1)/(x + 1))(2*k-1) の収束程度を計算してみると、下表のようになる。k=100の場合である。
●実験2(仮数部方式の実測) 2式を用いて、今度は、そのまま値を適用する方法と、仮数部を適用する方法で比較してみる。ここで、紹介しているUltraMathにて、行った。 ○方法 精度300桁で、ln(123) をそれぞれの方法で算出させ、時間を計測した。 ○結果(絶対時間はあまり意味がない) 1.値をそのままで算出:約35秒 2.仮数部で算出:約3秒 10倍以上の開きがある。直接の場合、級数の分子は、122/124 = 0.98387 と、1に近く、なかなか収束しないためである。 ●結論 対数関数では、仮数部のみで算出し、2式を用いれば、安定した収束と、高精度が得られる。 但し、仮数部での演算では、(P + 1) * ln(10) なる演算が必要となる。ln(10) を予め算出しておき定数として持つなどする必要がある。若干、自己矛盾的である。また、精度を出すには、この ln(10) の精度も必要となるので、事前の準備が必要となる。
|