0

私は浮動小数点の加算を学んでいますが、一部でかなり混乱しています。私が取り組んでいる例は次のようになります。

(8 ビット マシン、指数超過 -3 を想定)

x = 6.75 = 01011011
y = -10 = 11100100

非正規化して同じ指数を使用すると、次のようになります。

x = 1.1011 x 2^2 = 0.1101 x 2^3
y = -1.0100 x 2^3

仮数を加算/減算すると、次のようになります。

01101 + -10100 = -00111

01101 + -10100 = -00111 の意味がよくわかりません。誰かが私にこれを説明してもらえますか?

4

3 に答える 3

5

まず、1.1011•2 2をスケーリングすると、0.1101•2 3ではなく、0.11011•2 3になります。ビットを早期に破棄するのはエラーです。

しかし、このままでは 01101 + -10100 を計算したい。大きい方の数値を小さい方の数値の上に置きます。大きい方の数値は負であるため、結果は負でなければならないことに注意してください。

1 0 1 0 0
0 1 1 0 1
_________

今、小学校の道を引きます。右側では、0 から 1 を引きます。これには左の桁から借用する必要があるため、10 (0 と借用した値) から 1 を引き、借用をマークします。

1 0 1 0'0
0 1 1 0 1
_________
        1

ここで、-1 から 0 を引きます (0 から借用を差し引いた値)。これには再度借用が必要になるため、1 から 0 を引きます (0 から 1 の借用を引いて、新しい借用の 10 を足します)。

1 0 1'0'0
0 1 1 0 1
_________
      1 1

次に、0 から 1 (1 から借りた 1 を引いたもの)。もう一度借りるので、10 から 1 を引きます。

1 0'1'0'0
0 1 1 0 1
_________
    1 1 1

次に、-1 から 1 (0 から借りた 1 を引く)。再び借りるので、1 から 1 を引きます (0 から借りたものを 1 と新しく借りた 10 を足す)。

1'0'1'0'0
0 1 1 0 1
_________
  0 1 1 1

次に、0 から 0 (1 から借りた 1 を引いたもの)。最後に、新しい借用はなく、次のようになります。

1'0'1'0'0
0 1 1 0 1
_________
0 0 1 1 1

これは負であることを覚えているので、結果は -00111 です。

于 2012-08-27T17:36:16.113 に答える
2

それを説明する最も簡単な方法は、それらを 10 進数に変換することです。

+01101 (base 2) = +13 (base 10)
-10100 (base 2) = -20 (base 10)

-20 + 13 = -7

-7 (base 10) = -00111 (base 2)
于 2012-08-27T17:35:53.167 に答える
1

まず、10 進数以外の基数で簡単な計算を行うのに行き詰まった場合、何が起こっているのかを確認するために 10 進数に戻すと役立つ場合があることがわかります。

したがって、最初に数字を追加すると、

6.75 - 10.0 = -3.25

またはバイナリでは、指数は同じ累乗であるため、あまり気にしません。

01101 - 10100 = -00111

この操作を手動で実行する最善の方法は、次の結果を見つけることです。

 10100
-01101

通常の加算規則を使用して、結果を反転します。簡単に言うと:

減算を実行するために、最も左の 1 から借ります。

 02100
-01101
 _____
 00111

また、一番下の列が 1 であるため、10 進数で実行する場合と同様に、再度借用する必要があります。

さて、この結果が実際に何であるかを再確認しましょう。

-0.0111_2 * 2 ^ 3

実際には -3.5 です。その理由は、1.1011 x 2^2 を実際の値 .11011 x 2^3 ではなく 0.1101 x 2^3 として扱うことによる精度の損失です。

于 2012-08-27T17:36:08.357 に答える