|
|
●概要 級数展開にて求める。但し、そのままではかなり収束が遅いので工夫が必要となる。 ●級数 以下の級数を使用する。arccos は、arcsin より求める。 ・arcsin(X) = (2 * k - 1)!!/((2 * k)!! * (2 * k + 1)) * X(2*k+1) [k = 0 to ∞] 級数の収束予測を行うと、下表のように、X = 1 近傍では、5000項でも、わずか 7 桁しか得られなく、とても実用できない。
●arcsin :X を小さくする ○余角
A = π / 2 - B であるから、 arcsin(X) = π / 2 - arcsin(Y) ところで、
X2 + Y2 = 1 だから、 arcsin(Y) = arcsin(sqrt(1 - X2)) となる。sqrt(1 - X2) は、X が、1 に近いほど、小さくなるので、収束が期待できる。 余角を採用する判定は、 X > sqrt(1 - X2) を解けばよい。これを解くと、 X > 1 / sqrt(2) = 0.7 つまり、|X| が 0.7以上の場合は、余角を採用する。 ○加法定理 sin の加法定理は、 sin(α - β) = sin(α)*cos(β) - sin(β)*cos(α) であるが、今、sin(α) = x、sin(β) = y とし、arc に適用すると、 α = arcsin(x)、β = arcsin(y) なので、 arcsin(x) - arcsin(y) = arcsin(x*sqrt(1 - y2) - y*sqrt(1 - x2)) と、よく知られた関係式となる。ここで、 z = x*sqrt(1 - y2) - y*sqrt(1 - x2) とおいて、変形すると、 arcsin(x) = arcsin(y) + arcsin(z) 与えられた値をx とすれば、arcsin(y) + arcsin(z) を求めれば良い。y と z は、上記の関係内であれば任意なので、今、 arcsin(y) =[arcsin(x)] [n] は、限りなく真値 n に近いと言う意味。 ここでの真値とは、求める精度での値。 とすれば、arcsin(z) は、限りなく0に近く(つまり、ラフ値と真値との差分)にならざるを得なくなる。つまり、z もそうなる。対数で行った工夫と同じコンセプトである。 [arcsin(x)] は、組込み関数で、求めれば、15桁の精度の値が得られる。この値を使い、多倍長(目標精度)で、 y = sin([arcsin(x)]) を求め、z を算出し、この z を級数でarcsin値とする。 下表は、基本(余角までの対応)と、改良(加法定理の対応)との速度実測である。20〜40倍の速度が得られているので、加法定理による改良は劇的である。
|