私はそのサイトを使用しました: http://sandbox.mc.edu/~bennet/cs110/flt/dtof.html彼らは、指数がで、仮数がであることに基づいている2.625
と言います。したがって、その数はであり、これは明らかに ではありません。0_100_0101
4
5/16
(5/16) * 2^4
2.625
では、どうあるべきか。
私はそのサイトを使用しました: http://sandbox.mc.edu/~bennet/cs110/flt/dtof.html彼らは、指数がで、仮数がであることに基づいている2.625
と言います。したがって、その数はであり、これは明らかに ではありません。0_100_0101
4
5/16
(5/16) * 2^4
2.625
では、どうあるべきか。
データを間違った方法で解釈しています。
0は符号であるため、数値は正です。100は、実際には1(2 ^ 1)である指数です。指数は符号付きであり、可能な値は次のとおりです。
000(数値0、および非正規化数値)
001 -2
010 -1
011 0100
1
101 2
110 3
111(無限大とNAN)
PS NAN:数字ではありません(エラーコードなど)
0101はあなたの仮数です。
これが実際に意味するのは、数値が1.0101であることです(すべての数値は「1」で始まる必要があるため、精度を高めるための隠しビットがあります。「1」は実際には格納されません)。
これにより、(1 + 5/16)* 2=2.625が得られます
最も重要な「1」はエンコードされません。したがって、変換時にそれを追加する必要があります。
この場合、数字は「0101」であるため、「1」を追加すると「1.0101」になります。その場合、指数は4ですが、3でオフセットする必要があるため、実際の乗数は2^1です。
これにより、「10.101」の結果が得られます。これは実際には2.625です。
[JasonDの回答を拡大]
浮動小数点数が負の指数を持つ可能性があることを理解している、または当然のことと見なすのは安全だと思います。
しかし、よく考えてみると、それは実際にどのように起こるのでしょうか? それが「偏見」の出番であり、それがあなたの理解におけるミッシングリンクだと思います. あなたのリンクでは、バイアスを計算するための次の法則について言及しています。
2^(k-1) - 1
ここで、k は指数フィールドのビット数です。あなたの例では、k は 3 ビットだったので、バイアスは 3 です。このようにして、範囲 [-3,4] (包括的) 内の任意の指数をエンコードできます。
したがって、数値をデコードするときは、最初に指数を「バイアス解除」する必要があることは明らかです。したがって、JasonD が述べたように、2^4 は実際には 2^1 です。
浮動小数点数は 45 (基数 16)、つまり 01000101 (基数 2) です。
0101 は仮数部分で、100 は指数部分です...
先頭のものを復元すると、仮数は 1.0101 に更新されます...
指数からバイアスを差し引くと、8 ビット表現の場合は 3 であり、指数は 1 になります。
バイナリ表現は 1.0101 * 2^1 です...
非正規化すると、2.625 のバイナリ表現である 10.101 が得られます...