VB.NETはじめる(その9)

更新日:2003/9/1

多倍長計算 加減乗除編 その2

9.1 乗算

(1)Excelで確認

乗算の原理を確認するために、例によってExcelシートで確認した。
Kanbayashi氏からの乗算方法のプログラムを参考にさせて頂き、次のように考えた。
加減算の場合と同様に配列a、bに整数が入っているとする。c=a×bを計算する。
たとえば、b(1)×a(1)を計算した場合、加算の場合と異なり、繰り上がりは、1とは限らない。
上位への繰り上がりは、この積を10^kで割った商となる。c(1)は、余りとなる。
また、加算の場合と異なり、b(2)についてもa(1)からとかけ算を行う必要があり、
前回の結果と1桁ずらして足しあげるなど複雑になる。
Excelシートで確認しておくと便利である。Excelシートでは、kは、最大4までとなる。
その骨子は、次のようになる。ここで、配列dは、作業用である。
なお、na、nbは、それぞれの配列の要素数。
c、dは、na、nbの最大値の(2倍+1)桁数分を確保している。このあたり、Kanbayashi氏のプログラムでは、無駄な領域を取らない工夫をされているようであるが、ここでは簡単さを優先した。。

For i = 1 To nb
  agari = 0
  For j = 1 To na
    work = (a(j) * b(i) + agari) \ 10 ^ k
    d(j) = (a(j) * b(i) + agari) Mod 10 ^ k
    agari = work
  Next j
  d(na + 1) = agari
  agari = 0
  For j = 1 To na + 1
    work = c(j + i - 1) + d(j) + agari
    If work >= 10 ^ k Then
      c(j + i - 1) = work - 10 ^ k
      agari = 1
     Else
      c(j + i - 1) = work
      agari = 0
    End If
    d(j) = 0
  Next j
Next i

このExcelブックは、「自作もの」にアップした。

(2)VB.NETの場合の注意点

基本的には、Excelの場合と同様であるが、計算途中で値がInteger宣言の範囲を超える場合がある。
そこですべて変数は、Longで宣言している。これも無駄な部分があるが、とりあえずk=8までエラーが起きないようである。
マイナス符号については、加減算の場合と同様に場合に分けて考慮してある。(符号はマイナス符号のみ)

9.2 自作ものに追加

(1)乗算のExcelブック

乗算の原理を確認するためのExcelブックを自作ものに追加した。
名称は、TabaichoZyozanExcel.LZHである。

(2)乗算を可能にしたものを再アップ

加減算までのものと同一の名称で加減乗算が可能になったものをアップした。
TabaichoKagenzyozyo.LZHである。

VB.NETはじめるに戻る