• ベストアンサー

浮動小数点表示 加算方法 IEEE

指数部3bit、仮数部4bit、符号1bitの合計8bitの2進数の浮動小数点表示で、 (1)0.125+0.125+2.5 (2)2.5+0.125+0.125   (10進数) を計算せよ。 という問題です。 0.125(10)は00000000(2)、2.5(10)は01000100(2)となることはわかるのですが、この二つの計算方法がよく理解できません。 どちらかが誤差が生じたりすると思うのですが、それがよくわからず困っています。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.1

>指数部3bit、仮数部4bit、符号1bitの合計8bitの2進数の浮動小数点表示で、 これだけの情報では、ビットパターンが不明です。 ・指数部に下駄を履かせるのか。履かせるならいくつか ・仮数部の正規化方法 >0.125(10)は00000000(2) から、「指数部の下駄は3、仮数部は1以上2未満に正規化してその小数部を表現する」でしょうか。 指数の違う値の足し算の場合はまず仮数をシフトさせて位(指数)をそろえます。大きい方が2.5なので、指数の下駄を取って、省略されたかすの1の位を付け加えると、 指数: 1 仮数: 1.0100 十進で表現した値: (1+1/4)x2^1=2.5 0.125の指数を1にすると、 指数: 1 仮数: 0.0001 十進で表現した値: (0+1/16)x2^1=0.125 >(1)0.125+0.125+2.5 まず、0.125+0.125 指数: -3 仮数: 1.0000 + 1.0000 = 10.0000 正規化して、 指数: -2 仮数: 1.0000 これを2.5と足すために、指数が1となるように仮数部をシフト 指数: 1 仮数: 0.0010 これと2.5を足す 指数: 1 仮数: 0.0010 + 1.0100 = 1.0110 ビット表現に直すと、 01000110 >(2)2.5+0.125+0.125 最初に書いた0.125を指数1にした表現を使って2.5と0.125を足し算 指数: 1 仮数: 1.0100 + 0.0001 = 1.0101 さらに、0.125を足して、 指数: 1 仮数: 1.0101 + 0.0001 = 1.0110 ビット表現に直すと、(1)と同じく 01000110 どちらも誤差は生じません。 誤差が生じるのは、指数あわせの仮数部シフトをしたときに、仮数部の4bitで表されなかった場合です。 2.5 + 0.0625 だと、0.0625 を指数部1にしようとすると、 指数: 1 仮数: 0.00001 と、小数点以下が5bit必要なので表現できず、誤差が生じます。

weissewine
質問者

お礼

とても詳しくて本当に助かりました! ありがとうございました! P.S.下駄、正規化等の詳細を書き込まず、すみませんでした・・・

関連するQ&A

  • IEEE754 浮動小数点の問題

    -10.375(10進数)をIEEE754規格の単精度浮動小数点表現のビット列で示せ。という問題で、 ・仮数部の符号ビットが1bitで指数部が8bitで仮数部が23bitで合計32bitでいいんですよね?本によって割り当てが違うんですけど。 ・僕自身この問題を解いた結果、1 10000010 0100110・・・0 (一番前が、符号bit。真中が指数bit。一番後ろが仮数bit) で合っていますか?答え合わせのほどを。 どうか、願いします。

  • 浮動小数点表現

    2^{24}を32bit整数表現及び32bit(単精度)浮動小数点表現で表せ。 結果は16進数で示せ。 符号ビット:MSB 指数部n:7ビット 仮数部:24ビット という問題があるのですが、 解いてみたものの、答えもないのであっているのか分かりません。 以下の答えで合っているでしょうか? また、合っていなかったら、どのように解くのか教えていただけませんか? 整数表現 0100 0000H 浮動小数点 0100 1000 0100 0000 0000 0000 0000 0000

  • 16ビット浮動小数点数の表現方法について

    学校の課題において、ある数を2進数で表現し、さらにその数を16ビット浮動小数点数で表しなさい。またそのとき生じる誤差の名称を記しなさい、という課題がでており取り組んでいるのですが、ネットで調べていても計算方法が理解できず行き詰っております。どなたか計算方法の手助けをお願いできないでしょうか。 与えられた条件 符号ビット:1ビット(0:正、1:負) 指数部:4ビット 仮数部:11ビット 16ビット浮動小数点数で表す数 10011100011000011 です。計算方法を理解したいので、なるべく詳しくお願いいたします。 誤差の名称もできればご教授願います。

  • 浮動小数点の問題です。

    10進数+0.375を浮動小数点で記憶させ、その記憶領域のダンプリストを読み取ると、 0.375は16進数で(1)に、 -1は16進数で(2)となる。 答えは(1)は7F00、(2)8600です。 この2つの問題の途中式と解説をお願いします。 バイト型:バイト数は1バイト,負の補数は2の補数で表す 整数型:バイト数は2バイト,負の補数は2の補数で表す 浮動小数点:バイト数は2バイト,符号1ビット,指数部5ビット,仮数部10ビット ビット番号0:符号部.仮数部の符号が入っている.0なら正,1なら負 ビット番号1-5:指数部.負の値を2の補数で表す ビット番号6-15:仮数部.ビット番号6を小数点第1位とする仮数部の小数点以下の絶対値が、正規化された2進数で入っている 正規化とは,仮数部が2進数で0.1以上1.0未満になるよう指数部を増減する操作である

  • 浮動小数表記方式

    こんにちわ すいません、よろしくお願い致します。 以下のIEEEが提唱する32ビット浮動小数点の表記形式を用いて、十進数の503.625を表記すると、どのようになるか。#IEEEの32it浮動小数点表記方式#符号部:1bit(0:正、1:負)指数部:8bit(2の乗数部分に127を加える ex.8乗→8+127=135=二進数で10000111)仮数部:23bit(仮数を二進小数で1.xxxxxとなるよう調整したxxxxxの部分)符号部、指数部、仮数部の順で左から詰め、仮数部の残りは0で埋める。それを16進数で表す。

  • 基本情報の浮動小数点について

    基本情報技術者試験の勉強をしているのですが、浮動小数点の問題がどうしても解けません。問題を読んでもいまひとつ理解できず、四苦八苦しています。 下記の問題なのですが、教えていただけますでしょうか。 (平成12年に出題された問題(十進数0.375を正規化)は、理解できました) 問題集には解き方が載っているのですが、それが理解できません。解き方は以下です。 26.5を長さ32ビットの浮動小数点で表す (1) 26.5を16進数に変換  26.5の2進数:11010.1  11010.1の16進数:0001 1010 . 1000 1  A . 8   (2) 小数点位置の移動          小数点を左に2けた移動:1A.8 → (0.1A8) × 16の2乗  #ここまでは理解できます (3) 指数部の値16の2乗 → 16の0乗を(1000000)2進数=64とする  #ここがまるで分かりません        16の2乗の2を64に加える        1000000 … 64の2進数       + 10 … 2の2進数       ─────        1000010 … 指数の値とする  #「16の0乗を1000000=64とする」の部分が分かりません (4) まとめ  符号 指数部 仮数部   0│1000010│0001│1010│1000│00…0     16の2乗 1  A  8  #符号と仮数部は理解できるのですが、指数部が分かりません よろしくお願いいたします。

  • 浮動小数点について

    当方、浮動小数点を勉強しているのですが、 テキストの解説を読んでも理解が出来ません。 正規化とか指数と仮数の意味が分かりません。 そこで質問なのですが、浮動小数点の計算方法を教えて下さい。 IEEE形式の浮動小数点も教えて頂けると助かります。 また、下記の問題について解説して下さい。 数値を16ビットの浮動小数点表示法で表現する。 形式は図に示す通りである。10進数0.375を正規化した表現は、どれか。 ここでの正規化は、仮数部の有効数字よりも上位の0が無くなるように、 指数部を調節する操作である。 (図は添付します) 何故「E」の値が「1111」になるのでしょうか。 お手数ですが、ご教授お願いします。 尚、特に分かり易いホームページがあったら、 そのURLを記載して頂いても結構です。 以上、よろしくお願い致します。

  • 浮動小数点とIEEE754

    初めまして。 現在、浮動小数点について調べています。 #質問カテゴリ、間違っていたらすみません。 色々調べていると、こんなサイトを見つけました。 http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/fudo.htm 分かり易い解説だったんですが、疑問も湧いてきました。 サイトの内容は、0.375を浮動小数点に直すという内容なんですが 汎用型の時は『0.11 × 2の-1乗』 IEEE754の時は『1.1 × 2の-2乗』 で計算しています。 Q1) 汎用とIEEEの違いは『127』を足すだけだと思っていたのですが 『2の-n乗』の直し方も異なるのでしょうか。 もう一つ質問です。 整数入力をIEEE754に準拠したフォーマットで出力させるデジタル回路を作成しています。 出力形式は32bit or 64bitです。(単精度か倍精度) そこで悩んでいるのが入力のbit数とその内訳です。 入力bitは『符号・整数・小数』で形成されているかと思うのですが 符号以外のbit内訳が分かりません。 Q2) 単精度/倍精度、それぞれの入力範囲bitと、その内訳を教えて頂けないでしょうか。 (単精度:合計16bit ⇒ 符号1bit、整数7bit、小数8bit)みたいな感じでお願いします。 宜しくお願いします。 分かりにくい質問でしたらご指摘下さい。

  • 32ビットの浮動小数点について

    32ビットの浮動小数点(符号1ビット指数8ビット仮数23ビット)で非正規表現をもとめるには例えば(符号0指数0仮数1.01101)はどういう計算をすれば良いのでしょうか?

  • 浮動小数点について

    独学でプログラミングの勉強をしています。Wiki等で調べたりしましたが、 下記テキストの質問の計算が全く分かりません。 分かりやすく説明して頂けるとありがたいです。 宜しくお願い致します。 質問: 二つの浮動小数点の数字があり、SEEMMMM(S=符号付数値、E=指数、M=仮数)の形式で表示されています。 指数はエクセス数50、仮数は符号付数値、小数点は右の仮数に表示されます。 0 53 1110 0 50 3020 二つの数字を加算し、正しく表示された浮動小数点形式と実数をすべての計算式も含め表しなさい。