ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

上へ
平方根
立方根
整数指数
実数指数(Exp)
実数指数(一般)
対数
正弦/余弦
正接
逆正弦/逆余弦
逆正接
双曲線正弦/余弦
双曲線正接
逆双曲線正弦
階乗評価関数
級数評価関数
演算時間評価関数

数学関数

逆正弦/逆余弦

最終更新日:2006/04/15

●概要

 級数展開にて求める。但し、そのままではかなり収束が遅いので工夫が必要となる。

●級数

 以下の級数を使用する。arccos は、arcsin より求める。

 ・arcsin(X) = (2 * k - 1)!!/((2 * k)!! * (2 * k + 1)) * X(2*k+1) [k = 0 to ∞]

 級数の収束予測を行うと、下表のように、X = 1 近傍では、5000項でも、わずか 7 桁しか得られなく、とても実用できない。

k 係数のオーダ
1 -1
100 -4
500 -5
1,000 -6
5,000 -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)
  cos(β) = sqrt(1 - y2)、cos(α) = sqrt(1 - x2)

なので、

  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倍の速度が得られているので、加法定理による改良は劇的である。