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

上へ
加算
減算
乗算
除算

四則演算方式

減算

最終更新日:2006/11/29 新規

●概要

 補数方式ではないので、負数があると面倒な処理が必要となる。全て絶対値演算になり、符号は別途調整される。減算といえど、加算になる場合もある。

●全体

 C = A - B なる演算では、

  1. 符号の組合せによって演算を決定する。
  2. 符号は別途決定する。
  3. 加減算は同じ指数同士でないと演算できないので指数を合わせる。これは指数の小さい方が大きい方に合わせ、桁移動する。結果の指数は大きい方で決まる。
  4. 演算する。
  5. 結果を正規化する。

●演算前処理

○符号検査

  1. 少なくともどちらかが、Overflow、NaN であれば、結果は、結果は Zero とする。
  2. 双方が、Zero であれば、結果も、Zero。
  3. 片方がZero であれば、もう一方の値のみで結果を算出する。
  4. Positive、Negative などであれば、次の処理へ。

○符号と大小関係

 a、b をそれぞれの絶対値とすれば、下表のようになる。

  B
+ -
A + a - b a + b
- -a - b = -(a + b) -a + b = b - a
  • 同符号の場合、減算となる(上表で黄色の部分)。減算は必ず、絶対値の大きい方から小さいものを減ずる演算とするため、順序と符号を調整する。加算の頁参照。
  • その他は加算となる。

○桁合せ/配列合せ

 指数部が異なる場合は、一時的に指数部の小さい方を非正規化状態にし、指数を大きい方に合せる。移動桁数は差分となる。例えば、

 1.2345(10) - 5.67(8)

では、指数がことなるので、小さい方を差分 2 だけ、右シフトする。つまり、0.0567(10) にする。これにて、

 1.2345(10) - 0.0567(10)

は、仮数部の単純減算で行える。

 また、両者の配列数が異なる場合は、大きい方に合せておく。

●演算

○減算

 減算は到って簡単である。配列の要素同士をInteger として以下のように減算する。

Integer配列 A() - B() → C() なる減算

Dim i, L As Integer
Dim S, BR As Integer
L = A.Length
ReDim C(L)
BR = 0
For i = L - 1 To 0 Step -1   '後ろから
   S = A(i) - B(i) - BR
   If S < 0 Then                  'ボロー発生
      C(i + 1) = S + Base
      BR = 1
   Else
      C(i + 1) = S
      BR = 0
   End If
Next

 必ず大きい方から引くので、全体としてのボローはないが、正規化処理の共通化のために、C() は頭に余計な要素が追加されいる。従って、C() = 0 である。

●後処理

○正規化

 C(0)は、無条件に除去。減算の場合は、先頭要素が 0 になることがあるので、先頭の 0 要素を除去する。除去した数*(-8) を指数補正値とする。後ろの 0 要素を除去する。全体として 0 になることもある。有効桁数を数える。

○符号

 符号を設定する。