4

IEEE 754 32 ビット単精度浮動小数点値 (標準 c float 変数) をMIL-STD-1750A形式の unsigned long 変数に変換しようとしています。この投稿の最後に、IEEE 754 と MIL-STD-1750A の両方の仕様を含めました。現在、指数の変換に関するコードで問題が発生しています。仮数の変換にも問題がありますが、まだ修正していません。上記のリンクの表 3 にリストされている例を使用して、プログラムが正しく変換されているかどうかを確認しています。これらの例のいくつかは、私には意味がありません。

  1. これら 2 つの例が同じ指数を持つにはどうすればよいでしょうか?

    .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0000) 
    -1 x 2^0 (1000 0000 0000 0000 0000 0000 0000 0000)
    

    .5 x 2^0 には小数点以下 1 桁があり、-1 には小数点以下の桁がないため、.5 x 2^0 の値は次のようになります。

    .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0010)
    

    右?(1750A はプラス 1 バイアスを使用するため、0001 の代わりに 0010)

  2. 最後の例で 32 ビットすべてを使用し、最初のビットを 1 にして負の値を示すにはどうすればよいでしょうか?

    0.7500001x2^4 (1001 1111 1111 1111 1111 1111 0000 0100)
    
  3. 指数が 127 の値は 7F (0111 1111) であることがわかりますが、指数が負の 127 の値はどうでしょうか? 81 (1000 0001) でしょうか。もしそうなら、それは127の2の補数+1だからですか?

ありがとうございました

1750A仕様

4

2 に答える 2

1

1) これら 2 つの例の指数が同じになるにはどうすればよいでしょうか?

私が理解しているように、符号と仮数は範囲 [-1.0,1.0) の 2 の補数値を効果的に定義します。

もちろん、これは冗長な表現 (0.125*2 1 = 0.25*2 0など) につながります。そのため、範囲 [-0.5,0.5) の仮数値を許可しないことにより、正規の正規化された表現が選択されます。

したがって、2 つの例では、-1.0 と 0.5 の両方が「許可された」仮数範囲に含まれるため、両方とも同じ指数値を共有します。

2) 最後の例で 32 ビットすべてを使用し、最初のビットを 1 にして負の値を示すにはどうすればよいでしょうか?

それは私には正しくありません。どのようにその表現を取得しましたか?

3) 負の 127 指数を持つ値はどうですか? 81 (1000 0001) でしょうか。

そう信じる。

于 2013-01-28T13:49:29.390 に答える