21

10 進数 (10 進数) を手動で IEEE 754 単精度浮動小数点形式に変更するにはどうすればよいですか? 符号、指数、仮数の 3 つの部分があることを理解しています。最後の 2 つの部分が実際に何を表しているのか完全には理解できません。

4

3 に答える 3

27

数値よりも小さい2の最大の累乗を見つけます。たとえば、x = 10.0で開始し、2 3 = 8である場合、指数は3です。指数は127でバイアスされているため、指数は127+として表されます。 3=130。仮数は10.0/8=1.25になります。1は暗黙的であるため、0.25を表す必要があります。これは、23ビットの符号なし小数として表される場合は010 0000 0000 000000000000です。正の場合、符号ビットは0です。だから私たちは持っています:

s | exp [130]  | mantissa [(1).25]            |

0 | 100 0001 0 | 010 0000 0000 0000 0000 0000 |

0x41200000

簡単なCプログラムで表現をテストできます。

#include <stdio.h>

typedef union
{
    int i;
    float f;
} U;

int main(void)
{
    U u;
    
    u.f = 10.0;
    
    printf("%g = %#x\n", u.f, u.i);

    return 0;
}
于 2010-03-08T21:46:23.163 に答える
8

浮動小数点数は単に科学表記法です。科学表記法を使用して、地球の円周をメートルで表すように頼んだとしましょう。あなたは次のように書くでしょう:

4.007516×10 7 m

指数はまさにそれです。ここでは 10 の累乗です。仮数は数値の実際の桁数です。もちろん、符号は正または負です。したがって、この場合、指数は 7 で、仮数は 4.007516 です。

IEEE754 と小学校の科学的表記法との唯一の大きな違いは、浮動小数点数が基数 2であることです。つまり、何かの累乗の 10 倍ではなく、何かの累乗の 2 倍です。したがって、たとえば 256 を通常の人間の科学表記法で書くと、次のようになります。

2.56×10 2 (仮数2.56、指数2)、

IEEE754 では、

1×2 8 — 仮数は 1 で、指数は 8 です。

于 2010-03-08T21:55:46.170 に答える