|
|
●概要 整数の場合は指数法則を利用した二進展開の方法で高速に求められる。原理は、T8118 冪乗算の高速化 を参照方。 ●二進展開 VBではビット演算がなく、二進の扱いは不得手であるので、工夫が要る。実際の内部関数を掲げる。 UltraLong で、AB を、二進展開しながら演算する。B は正整数。 Private Function CIPower(ByRef A As
UltraLong, ByRef B As UltraLong) As UltraLong 前処理された(符号、指数部の調整)UltraLong値をLong に変換し、その値の下位ビットを検査し、1であれば、前の値に乗積する。次の、A2k を算出する。検査するビットがなくなるまで繰り返す。というものである。Longに変換しているので、整数指数としては有効桁数10進で18桁程度となる。 ●実測値 直接冪乗する方法と、二進展開法で時間を実測した結果である。16383と16384は、2M -1 と 2M の比較を行うために実測した。二進展開法では、2M -1 が時間が掛かり、 2M が、最も速くなるのが確認できる。いずれにしても、二進展開法は圧倒的に速い。検算は、両者の結果の一致桁数を検査したものである(注意:直接の方が乗算回数が多いので精度が落ちる。)。精度が高いと、結果が精度桁に達しない整数演算(打ち切りなし)となり、精度桁以下になる場合があるが、これは正しい。
|