2

picoblaze マイクロコントローラ (1 符号ビット、4 指数ビット、および 3 仮数ビット) 用のバイナリ 8 ビット浮動小数点加算アルゴリズムを作成しようとしています。

正の数で動作するようになりましたが、負の数もある場合の方法がわかりません。

私の主な問題は、結果の符号ビットを設定することです。誰かが正しく設定する方法を説明できますか?

私の考えは、両方の数字の符号をチェックすることでした。次に、両方が正の場合は符号を 0 に設定し、両方が負の場合は符号を 1 に設定し、以前と同じ方法で加算を行います。一方が負で他方が正の場合は、数値を比較して大きい方のビットに符号を付けますが、2 つの数値を比較する方法がわかりません。また、コードが少し雑然としています。より良い方法はありますか?

4

3 に答える 3

3

一般に (NaN などを無視して)、次の場合A = B + C:

  • Cの大きさが よりも大きい場合はB、 と を交換Bして、 の大きさが「より大きいか等しい」必要がCあることがわかります。注: マグニチュードは符号ビットを無視します (たとえば、6 > 4 であるため、-6 は +4 よりもマグニチュードが大きくなります)。B

  • Bとが異なる符号を持っている場合Cは、否定Cして実行しsubtract_internalます。他にやるadd_internal

  • for の場合、符号ビットを無視し、大きさを減算し (それは「より大きいか等しい」大きさでなければならsubtract_internalないことを忘れないでください)、次に、 or のいずれかの符号に等しい符号を設定します(いずれにせよ、それらは同じ符号を持ちます)。BABC

  • の場合add_internal、符号ビットを無視し、大きさを追加してから、またはAの符号に等しい符号を設定します(いずれにせよ、それらは同じ符号を持ちます)。BC

また、一般的に (NaN などを無視して)、次の場合A = B - C:

  • Cの大きさが よりも大きい場合は、それらの両方をB交換BCて否定し (例: )、大きさが「より大きいか等しい」必要がA - C == (-C) - (-A)あることがわかります。B

  • Bとが異なる符号を持っている場合Cは、否定Cして実行しadd_internalます。他にやるsubtract_internal

于 2019-06-19T19:53:29.027 に答える