• ベストアンサー

浮動小数点

浮動小数点について勉強していますが、本を見てもよくわかりません。 「イクセス表記とは、本来8ビットで表現できる値は0~255であるのに対し、元の値に127を加算することにより、-127~128までの表現を可能としています。つまり、Eが0の場合は-127を、Eが127の場合は0を、Eがすべて1の場合は128を示しています。」(日経BP社) とありましたが、 ●127を加算したら、なぜ-127~128か?このマイナスはどうしてでてくるのか? 何か、例をあげて教えてもらえればうれしいです。 よろしくお願いします。

  • choobn
  • お礼率62% (121/194)

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

>本来8ビットで表現できる値は0~255 ------------------------ 11111111 = +255 11111110 = +254 …… 10000001 = +129 10000000 = +128 01111111 = +127 01111110 = +126 …… 00000001 = +1 00000000 = 0 ------------------------ >イクセス表現とは、元の値に127(01111111)を加算 ------------------------ 11111111 = +128 >Eがすべて1の場合は128を 11111110 = +127 …… 10000001 = +2 10000000 = +1 01111111 = 0 >つまりEが127の場合は0を 01111110 = -1 …… 00000001 = -126 00000000 = -127 >Eが0の場合は-127を、 ------------------------ ということで,8ビット=256通りのパターンに どの数値に対応づけているかが違うわけです。 符号なし固定小数点数では, (11111111)~(00000000)に +255~0を対応。 イクセス127のゲタばき表現では, (11111111)~(00000000)に +128~-127を対応。※ ちなみに,符号あり2の補数表現では, (01111111)~(00000000)に +127~0, (11111111)~(10000000)に -1~-128となります。 (※ celtisさんご紹介のURLに詳細がありますが, IEEE 754 では指数部がオール1・オール0 の数を,特殊な数に対応づけています。) >ビット反転+1よりも、127加算するほうが単純 ------------------------ 仮数に登場する負の数の表現には「2の補数」を使う意味があるけれど, 指数に登場する負の数には補数を使う意味がないということですよね。 指数の大きさを合わせた後の仮数同士の計算は, (+5)+(-3)=(+2) でよいから,「補数の加算,で減算を実現」できる2の補数の意味がある。 でも,(aの5乗)+(aの-3乗)のような異なる指数の計算では, 指数をそのまま加減算してもダメですからね。 ------------------------

choobn
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • celtis
  • ベストアンサー率70% (2271/3210)
回答No.2

指数部の表記を単純化するためでしょうね。 2の補数を使用すると指数部のトップビット(左端のビット)が符号を表しますが、127を加算する(バイアスもしくは下駄履きとも表現する)ことで見かけ上は正の整数で表すことができます。 「ビット反転+1」するよりも、単に127加算するほうが単純ですから。 http://docs.hp.com/ja/B3906-90007/ch02s02.html

choobn
質問者

お礼

ありがとうございました。

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.1

> ●127を加算したら、なぜ-127~128か? > このマイナスはどうしてでてくるのか? 127を加算した結果が -127~128 になるのではなく, 元の値 (-127~128) に127を加算することにより, 8ビット無符号整数 E=0~255 にするのです. だから元の値は E-127 です.

choobn
質問者

お礼

ありがとうございました。

関連するQ&A

  • 浮動小数点について

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

  • 浮動小数点について

    32ビットの浮動小数点(符号1ビット指数8ビット仮数23ビット)で最小値を求めるにはどういう計算をすればいいのでしょうか?また調べた数値だと最小値 1.175494351E-38 最大値3.402823466E+38のところ±3.40282347E+38 ~ ±1.40239846E-45のところがあるのですがどちらが正しいのでしょうか?

  • 浮動小数点表現

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

  • 浮動小数点数型

    単精度浮動小数点型と倍精度浮動小数点数型、それぞれ値がとりうる範囲を教えてください。 単精度浮動小数点型 負の値は -3.4028235E+38 ~ -1.401298E-45、 正の値は 1.401298E-45 ~ 3.4028235E+38 の範囲の値 倍精度浮動小数点数型 負の値は -1.79769313486231570E+308 ~ -4.94065645841246544E-324、 正の値は 4.94065645841246544E-324 ~ 1.79769313486231570E+308 の範囲の値 とは記述してあるのですが、実際に小数1桁なら整数部はどのくらいの範囲の値がとれるのか、皆目わかりません。 どうか、わかりやすく教えてください。 よろしくお願い致します。

  • 浮動小数点の精度と範囲からすると、「0」はどうなるのでしょうか

    IEEE754の単精度による浮動小数点表現(符号部1ビット、指数部8ビット、仮数部23ビット)ですと、その表現できる範囲が数値の絶対値で、2^(-126)=1.2×10^(-38)から(2 - 2^(-23))×2^(127)=3.4×10^(38)になりますが、数値の「0」はどう表現されるのでしょうか。たとえば、C言語などで、変数の値が「0」の場合、コンピュータ内部の2進数表現はどのようになっているのでしょうか。よろしくお願いいたします。

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

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

  • 浮動小数点演算と固定小数点演算の使い分けについて

    解説書などには、「浮動小数点は3.14E0の形」や「固定小数点は3.14」などと説明されています。 では、例えば、ごく一般的な32ビットマシンで「3.14 * 45.6」という命令を書いたときに演算されるのは浮動小数点演算なのか、固定小数点演算なのかがわかりません。例えばIntelのx86CPUは、内部にFPUを持っているそうですが、この場合は「3.14 * 45.6」は、内部では必ず浮動小数点演算になっているということなのでしょうか? 「3.14 * 45.6」を「3.14E0 * 4.56E1」と書いた場合にしか浮動小数点演算されないということではないと思っているのですが、実際の浮動小数点演算と固定小数点演算の内部的な切り替えがわかりません。 理解が足りなくて、おかしな質問になっていましたら、その点もご指摘いただければうれしいです。

  • 浮動小数点について

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

  • 数値を浮動小数点表示

    基本情報技術者の勉強を始めたのですが、 浮動小数点の問題で分からないものがありました。 問題は、 ・基数は2。 ・数値を24ビットで表現。 ・左から1ビットは仮数の符号を表す。 (0なら正、1なら負) ・左から数えて2ビット目から8ビット目までで 2のべき乗を表す。(負数は2の補数で表す) ・右16ビットは仮数の絶対値を表す。 (あと、左から数えて8ビット目と9ビット目の間が 小数点位置、だという表示があります。) 以上のように24ビットの浮動小数点表示で、最大数を 16進数で表したものはどれか? この問題の答えは3FFFFFとなっているのですが、 どうしてこのような解答になるのでしょうか? ヒントには「指数部は負数を2の補数で表すので、左から 2ビット目も0でなければならない」とあるのですが、 わけわからない状態です。 簡単で結構ですので、教えていただけないでしょうか。 よろしくお願いします。

  • 浮動小数点の計算について

    Javaで0.1+0.2を計算すると0.30000000000000004になったり、10.0-9.9を計算すると、0.09999999999999964になったりするのはなぜですか? 参考書では。 「浮動小数点数を使った計算では、一見正確な値が計算されてるように見えてもほとんど場合内部では少しだけ誤差を含んだ値を持ってると、考えた方がいいでしょう。どのような計算を行った時にどの程度の誤差が出るのかは難しい話題になるのでこの本では詳しく説明しませんが、例えば100.0-99.99のように同じぐらいの数同士で引き算を行うと誤差が現れやすくなります。」 と書いてありました。 この本ではこれだけで説明が終わりました。 なぜ浮動小数点で計算を行うと誤差が出るのか詳しく教えていただけると助かります。

    • ベストアンサー
    • Java

専門家に質問してみよう