web-dev-qa-db-ja.com

10進数からIEEE 754単精度浮動小数点形式に変換するにはどうすればよいですか?

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

20
tgai

たとえば、x = 10.0から23 = 8、したがって、指数は3です。指数は127によってバイアスされるため、指数は127 + 3 = 130として表されます。仮数は、10.0/8 = 1.25です。 1は暗黙的であるため、0.25を表す必要があります。これは、23ビットの符号なし小数として表現した場合、010 0000 0000 0000 0000 0000です。正の場合、符号ビットは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;
}
26
Paul R

172.625の番号を取ります。この番号はBase10形式です。

この形式はbase2形式に変換しますこのため、まず172をバイナリ形式に変換します

128 64 32 16 8 4 2 1
 1  0  1  0  1 1 0 0
172=10101100

0.625をバイナリ形式に変換する

0.625*2=1.250   1
0.250*2=.50     0
0.50*2=1.0      1
0.625=101

172.625 = 10101100.101のバイナリ形式。これはbase2形式10101100 * 2です

この2進数のシフト

1.0101100*2 **7      Normalized
1.0101100 is mantissa
2 **7 is exponent

指数127を追加7 + 127 = 134

134をバイナリ形式に変換します

134=10000110

数字は正なので、数字の符号0

0 |10000110 |01011001010000000000000

説明:ビットの高位は数値の符号です。数値は符号絶対値形式で保存されます。指数は8ビットのフィールド形式で格納され、127で指数にバイアスがかけられます。バイナリポイントの右側の桁は23ビットの下位に格納されます。注---この形式はIEEE 32ビット浮動小数点形式です

11
RAHUL KUMAR

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

4.007516×107m

exponentはまさにそれです。ここでは10の累乗です。仮数は、数値の実際の数字です。そしてもちろん、サインは正または負です。したがって、この場合、指数は7であり、仮数は4.007516です。

IEEE754と学年の科学表記法との唯一の大きな違いは、浮動小数点数がbase 2にあるため、10の倍数ではないことです、それは何かの力の2倍です。したがって、たとえば、通常の人間の科学表記法で256を次のように記述します。

2.56×102 (仮数2.56および指数2)、

iEEE754では、

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

8
Crashworks