10 進数 (10 進数) を手動で IEEE 754 単精度浮動小数点形式に変更するにはどうすればよいですか? 符号、指数、仮数の 3 つの部分があることを理解しています。最後の 2 つの部分が実際に何を表しているのか完全には理解できません。
3 に答える
数値よりも小さい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;
}
浮動小数点数は単に科学表記法です。科学表記法を使用して、地球の円周をメートルで表すように頼んだとしましょう。あなたは次のように書くでしょう:
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 です。