1

次のような宿題があります。

「MIPS アセンブリ言語で半精度浮動小数点加算を実装します。ユーザーに 2 つの浮動小数点 (10 進数) を入力し、合計を計算して表示するように求めます。

半精度形式では、浮動小数点数を表すために 16 ビットが使用されます。指数フィールドは 5 ビット幅で、仮数フィールドは 10 ビットです。

単精度浮動小数点数を半精度浮動小数点数に変換してから、計算を実行する必要があります。」

MIPS で単精度浮動小数点から半精度浮動小数点に変換するにはどうすればよいですか?

4

1 に答える 1

5

IEEE-754 32 ビット 2 進浮動小数点オブジェクトを 16 ビットに変換するには:

  • 符号、指数、仮数フィールドを分離します。
  • 数値が NaN の場合 (指数はすべて 1 ビットで仮数フィールドはゼロ以外)、NaN を返します。(同じ符号ビットを使用し、指数フィールドをすべて 1 に設定し、新しい仮数の上位ビットを古い仮数の上位ビットに設定し [シグナリング/クワイエットを示すために一般的に使用されます]、新しい仮数がゼロでない限り、古い仮数は好きです。)
  • 指数フィールドがすべてゼロでない場合は、仮数フィールドに 2 23を追加します。指数フィールドがすべてゼロの場合は、それに 1 を追加します。(このステップは非正規数を正規化します。)
  • 指数から 127 を引いて 32 ビット フォーマットのバイアスを取り除き、15 を加えて 16 ビット フォーマットのバイアスを加えます。
  • 指数フィールドが -11 未満の場合、入力と同じ符号でゼロを返します。
  • 指数フィールドが 1 未満の場合: 一時的な値を、1 から指数フィールドを引いた値に等しいビット数だけ左にシフトされた仮数に設定します。ビット数に 13 を加えた数の仮数を右にシフトします。一時的な値が 2 23を超える場合は、仮数フィールドに 1 を追加します (切り上げます)。その加算によって仮数が 2 10に増加しない場合は、指数をゼロに設定し、符号ビット、ゼロ指数、および仮数から形成された非正規数 (またはゼロ) を返します。仮数が 2 10に増加した場合は、符号ビット、1 の指数フィールド、およびゼロ仮数から形成された数値を返します。
  • 仮数の下位 13 ビットが 2 12 を超えるか、2 12に等しく、次の上位ビットが 1 の場合、仮数に 2 13を追加します。仮数を右に 13 ビットシフトします。2 11未満でない場合は、指数に 1 を加算し、仮数を 1 ビット右にシフトします。
  • 指数フィールドが 30 より大きい場合は、入力と同じ符号で無限大を返します。
  • それ以外の場合は、符号ビット、指数、および仮数の下位 10 ビットから形成される通常の数値を返します。

上記は即興で書かれたものです。それはチェックする必要があります。また、例外の通知に関する考慮事項も含まれていません。

于 2013-04-23T14:06:33.910 に答える