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

上へ
高速化手法
平方根/立方根
整数指数
指数関数
実数指数
自然対数
一般対数
正弦/余弦
正接
逆正弦/逆余弦
逆正接
双曲線正弦/余弦
双曲線正接
逆双曲線関数

技術解説(数学関数編)

平方根/立方根

最終更新日:2006/12/10 再掲

●概要 

  求める値の逆数をニュートン法で求める。指数関数で、X0.5 では時間が掛かりすぎる。

●原理

○基本式

 通常、Y = X2 - a とし、漸化式を

 Xn+1 = Xn - 1 / 2 * (X2 - a) / X

となり、漸化式に逆数あるいは除算が現われ、速度的に不利となる。

○高速化

・平方根

 根の逆数(1/Sqrt(a))を求めることにすれば、関数は、

 f(X) = 1 / X2 - a

となる。これを、漸化式にすると、

 Xn+1 = Xn - (1 / 2) * Xn * (a * Xn2 - 1)

となる。ここには、多倍長同士の除算は含まれていない。また、δ = X * (a * X2 - 1) とすれば、収束条件にもなる。

 Sqrt(a) = (1/Sqrt(a)) * a

なので、最後に一回乗算する。

・立方根

 同様に解くと、漸化式は、

Xn+1 = Xn - (1 / 3) * Xn * (a * Xn3 - 1)

となる。この場合、最後に逆数を求める。

●演算方法

○平方根

 a = M * 10E

において、

・a = 10 2・N の場合

 10 * M  = 1 で、E-1 が、0 か 2 の倍数であれば、Sqrt(a) = 0.1 * 10((E-1) \ 2)+1 とする。

・a = 10 (2・N+1) の場合

 E = 2 * Q + R と変換する。Q = E \ 2、 R = E Mod 2 である。すると、

 a = M * 10R * 102・Q

従って、Sqrt(a) は、

 Sqrt(M * 10R) * 10Q

実際には、1/Sqrt(a) なので、

1/(Sqrt(M * 10R) * 10Q) = 10-Q/(Sqrt(M * 10R)

が求められる。R = 0 or 1 、M は、仮数部なので、結局、仮数部か仮数部の10倍の平方根の逆数を多段初期値法で求めることに帰着する。Q は指数部に加算すればよい。 多段初期値法については、逆数除算を参照方。

 Sqrt(a) = (1/Sqrt(a)) * a

なので、最後に一回乗算する。

○立方根

 a = M * 10E

・a = 10 3・N の場合

 10 * M  = 1 で、E-1 が、0 か 3 の倍数であれば、Sqrt(a) = 0.1 * 10((E-1) \ 3)+1 とする。

・a = 10 (3・N+1) の場合

  E = 3 * Q + R と変換する。Q = E \ 3、 R = E Mod 3 である。すると、

 a = M * 10R * 103・Q

従って、Cbrt(a) は、

 Cbrt(M * 10R) * 10Q

実際には、1/Cbrt(a) なので、

1/(Cbrt(M * 10R) * 10Q) = 10-Q/(Cbrt(M * 10R)

が求められる。R = 0 or 1 or 2、M は、仮数部なので、結局、仮数部か仮数部の10倍/100倍の立方根の逆数を求めることに帰着する。Q は指数部に加算すればよい。