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

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

数学関数

整数指数

最終更新日:2006/06/09

●概要

 整数の場合は指数法則を利用した二進展開の方法で高速に求められる。原理は、T8118 冪乗算の高速化 を参照方。

●二進展開

 VBではビット演算がなく、二進の扱いは不得手であるので、工夫が要る。実際の内部関数を掲げる。

UltraLong で、AB を、二進展開しながら演算する。B は正整数。

Private Function CIPower(ByRef A As UltraLong, ByRef B As UltraLong) As UltraLong
   If B.IsZero Then Return New UltraLong(1)
   Dim BB As Long = B.ToLong     '整数は有効桁数 18 桁が限度
   Dim R As Long
   Dim C As New UltraLong(1)      '乗積値
   Dim CC As New UltraLong(A)    'A2k を保持
   Do
      R = BB Mod 2                      '20 ビット
      BB = BB \ 2
      If Not R = 0 Then
         C = Mul(C, CC)                  'ビットが 1 なので、乗積する。
      End If
      If BB = 0 Then Exit Do
      CC = Mul(CC, CC)                 'A2k を算出
   Loop
   Return C
End Function

 前処理された(符号、指数部の調整)UltraLong値をLong に変換し、その値の下位ビットを検査し、1であれば、前の値に乗積する。次の、A2k を算出する。検査するビットがなくなるまで繰り返す。というものである。Longに変換しているので、整数指数としては有効桁数10進で18桁程度となる。

●実測値

 直接冪乗する方法と、二進展開法で時間を実測した結果である。16383と16384は、2M -1 と 2M の比較を行うために実測した。二進展開法では、2M -1 が時間が掛かり、 2M が、最も速くなるのが確認できる。いずれにしても、二進展開法は圧倒的に速い。検算は、両者の結果の一致桁数を検査したものである(注意:直接の方が乗算回数が多いので精度が落ちる。)。精度が高いと、結果が精度桁に達しない整数演算(打ち切りなし)となり、精度桁以下になる場合があるが、これは正しい。