1

私は C の初心者で、クラスで C を使用して、かなり低レベルのコンピューター システムを理解できるようにしています。

次の問題が発生しました。exp、frac、および「if」ステートメントごとに x と比較される数値を除いて、すべてのコードが与えられました。

逐語的に:

「あなたは、2^x の浮動小数点表現を計算する C 関数を作成するタスクを割り当てられました。これを行う最善の方法は、結果の IEEE 単精度表現を直接構築することであると判断しました。x が小さすぎると、ルーチンは 0.0 を返します. x が大きすぎると、+infinity を返します. 次のコードの空白部分を埋めて、正しい結果を計算してください. 関数 u2f が同じ値を持つ浮動小数点値を返すと仮定します.符号なし引数としてのビット表現。」

float fpwr2(int x)
{
    /* Result exponent and fraction */
    unsigned exp frac;
    unsigned u;
    if (x< -126){
        /* Too small. Return 0.0 */
        exp = 00000000;
        frac = 00000000000000000000000;
    }else if (x< 1){
        /* Denormalized result */
        exp = 00000000;
        frac = ;
    }else if (x< 128){
        /* Normalized result */
        exp = ;
        frac = ;
    }else{
        /* Too big. Return +00 */
        exp = 11111111;
        frac = 00000000000000000000000;
    }
    /* Pack exp and frac into 32 bits */
    u = exp << 23 | frac;
    /* Return as float */
    return u2f(u);
}

私は誰にも宿題をするように頼んでいません。道に迷いました。私が埋めたいくつかの空白についてはかなり確信がありますが、私が開いたままにしている空白には動的な解決策があるように思えます。つまり、答えは x に依存するのではないでしょうか?

私が理解するのを手伝ってください、私はそれが私が思っているよりもずっと簡単だと感じています!

4

0 に答える 0