2017-09-09 5 views
4

私は宿題に取り掛かっています。バイナリ浮動小数点数を小数部に変換する必要があります。私はプロセスを理解しているように感じますが、私は正しい答えを得ていません。ここに私の思考プロセスがあります。バイナリ浮動小数点を10進小数に変換するにはどうすればよいですか?

Iバイナリフロートを有する:0 000 101

  • 3ビットの指数フィールドのバイアスが3:2^(3-1)-1 = 3
  • 仮数が1.101(ベース2)
  • 指数ビットの値になります、0から指数ビット数-3を引いた値が-3なので、仮数部の小数点は3桁左に移動します。
    0.001101
  • ベース10では、 2^-3 + 2^-4 + 2^-6であり、これは0.203125または13/64に等しい。

しかし、13/64は正解ではありません。自動グレーダーはそれを受け入れません。私の答えが間違っていると、なぜ私は理解できず、誰かが私を正しい方向に向けることを望んでいます。

純粋な幸運で私は答えとして5/32を推測し、正しいと判断しました。なぜそれが当てはまるのかわかりません。

+0

それが正しい答えが何を言うのでしょうか? –

+0

この0.001101を正しいか間違えて見る別の方法は、1101/2^6または13/64と同じです。あなたの指数は間違っていなければなりませんか?適切な答えを知っていることはそれを正当化するべきですか? –

+1

純粋な幸運で私は答えとして5/32を推測し、それを正しく得ました。私はなぜそれが事実であるのか分からない – Grav

答えて

4

IEEE-754浮動小数点形式では、exponent = 0は非正規化であり、仮数の暗黙の先頭ビットは0です。

ウィキペディアには、多くの例が書かれたsingle-precision float (binary32)形式の詳細な記事があります。 binary32フロートの場合、式は(ウィキ記事から)です:

(−1)^signbit × 2^(−126)  × 0.significandbits ; denormal, expbits=0 
(−1)^signbit × 2^(expbits−127) × 1.significandbits ; normal 
Inf or NaN (depending on mantissa aka significant); expbits = all 1s 

(0.0は非正規の特殊なケースですが、実際には非正規とはみなされないことに注意してください)。

とにかく、指数がゼロの場合、指数はもはやexpbits - biasではなく、指数が1であることに注意してください。


戻るあなたのケースへ:あなたの仮数部は0.101バイナリ、0.625十進(私はcalc0b101/8を差し込ん)です。

2^-2 * 0.101(バイナリ)= 2^-2 * 0.625(10進数)= 0.15625 = 5/32


(例で)8言及https://en.wikipedia.org/wiki/Minifloat Wikipediaの記事がありますコンピュータグラフィックスハードウェア上で実際に使用される32ビットフォーマット以外のいくつかのビットフォーマットと同様、 (例えば、24ビットまたは16ビット)。楽しい事実:x86は、F16C ISA extensionでオンザフライでレジスタに/から変換する16ビットの半精度浮動小数点のベクトルをロード/格納できます。

もビットのためのチェックボックスで、このオンラインコンバータを参照してください:https://www.h-schmidt.net/FloatConverter/IEEE754.html

関連する問題