|
|
●概要 級数展開にて求める。但し、そのままではかなり収束が遅いので工夫が必要となる。 ●級数 ・arctan(X) = (-1)k-1 * X(2*k-1) / (2 * k - 1) [k = 1 to ∞] 級数の収束予測を行うと、下表のように、X = 1 近傍では、とても実用できない。分母が、1次なので、なかなか小さくなってくれない。
●方式 arctan は、変数の範囲が -∞〜∞ と広く、注意が必要となる。値を算出する方法は二通り考えられるが、結局、演算速度で選ぶことになる。
●arcsin より求める 下図から、A = arctan(x) = arcsin(x/y) なので、 arctan(x) = arcsin(x / sqrt(1 + x2)) で、求められる。arcsin と 1/sqrt の演算時間が支配的となる。最も簡便となるが、時間はどうか気になるところ。 下表は、arcsin と級数との時間を実測したものである。
とりあえず、級数で求める方法が良さそう。 ●級数で求める 変数の範囲が -∞〜∞ と広いので、適当なゾーンに分割して、値の縮小化を図らないといけない。 ○微小値 x < 1E-20〜30 などなら、直接、級数で求めても良さそう。 ○値の限定化 ・余角 上図から、arctan(x) = π /2 - arctan(1 / x) なので、少なくとも、x ≧ 1 では、1 / x を採用する。 ・既知の値との差を利用する ある特定の角度に区切って、その差を利用する。またしても、加法定理より、 tan(α - β) = (tan(α) - tan(β)) / (1 + tan(α) * tan(β))
上図から、x, y > 0 として、 tan(α - β) = (x - y) / (1 + x * y) だから、arc にすれば、 α - β = arctan((x - y) / (1 + x * y)) 今、β = π / 4 とすれば、y = 1 なので、 α - π / 4 = arctan((x - 1) / (x + 1)) ∴ α = π / 4 + arctan((x - 1) / (x + 1)) z = (x - 1) / (x + 1) とすれば、z < 1 となる。arctan(x) は、arctan(z) を求めることに帰着された。但し、闇雲に適用するのではなく、x の適当な範囲で採用する。角度にして、π/8 〜 3π/8 が分かりよい。x にすれば、0.4 〜 2.4 程度となる。z に換算すれば、-0.43 〜 0.41 となる。これにて、余角については、 X > 2.4 で採用することになる。 ○微小化 0.4 程度では、まだまだ収束はおぼつかない。更なる工夫が必要となる。既に、arcsin を求める方法で解説した方法をここでも考える。加法定理、 tan(α - β) = (x - y) / (1 + x * y) (上記) をarc を使って変形すると、 arctan(x) - arctan(y) = arctan(z) 但し、z = (x - y) / (1 + x * y) 従って、 arctan(x) = arctan(y) + arctan(z) 今、arctan(y) = [arctan(x)] [n] は、限りなく真値 n に近いと言う意味。 ここでの真値とは、求める精度での値。 とすれば、arctan(z) は、限りなく0に近く(つまり、ラフ値と真値との差分)にならざるを得なくなる。つまり、z もそうなる。 [arctan(x)] は、組込み関数で、求めれば、15桁の精度の値が得られる。この値を使い、多倍長(目標精度)で、 y = tan([arctan(x)]) を算出すれば、高精度な z が求まる。結局、arctan(z) を求めることに帰着された。z は、非常に微小な値となり、これによる級数の収束は期待できる。 ●結論 下表は、これまでの検討を実際に確かめた結果である。試験の変数は、0.699などの短い桁数ではなく、精度と同じ桁数としている(変数は、精度と同じ桁数の定数PI を5 で割ったもの。約 0.628318530717958647692528676655・・・・)。
4つの方法で同じ値が得られることも確認した。やはり、改良2 が、最も速く、これを採用する。
|