float型の内部表現を表示するプログラムを書いていくつか試してみたのですが、どこからどこまでが仮数部でどこからどこまでが指数部なのか良くわかりません。
曲がりなりにも自分で考えた結果は次のとおりです。
10進表示: 内部表現 ;2進の指数表現
2 :01000000000000000000000000000000;10.0*10^0
4 :01000000100000000000000000000000;10.0*10^1
8 :01000001000000000000000000000000;10.0*10^10
16:01000001100000000000000000000000;10.0*10^11
32:01000010000000000000000000000000;10.0*10^100
また、
1 :00111111100000000000000000000000;0.1111111*10^0
0.5 :00111111000000000000000000000000;0.0111111*10^0
0.25:00111110100000000000000000000000;?
0.125:00111110000000000000000000000000;?
0.0625:00111101100000000000000000000000;?
となりました。最上位ビットが符号だということは分かります。
質問をまとめると、
(1) 10進で 0.5 の2進指数表現は 0.0111111*10^0 ということなのでしょうか。もしそれで正解なら、どうして 0.1*10^0 としないでわざわざ丸め誤差を含む無限小数で表すのでしょうか。
(2) 仮数部と指数部のビットは決められていなくて、例えば状況によって仮数部のビットが少なくなり指数部のビットが多くなったりするのでしょうか。
(3)仮数部での小数点はどこにあるのでしょうか。
(4)float 型の小数精度は最小6桁ということですが、これは10進で6桁なのか2進で6桁なのか教えてください。
どれか一つでも教えていただけると助かります。
使ったコンパイラは Borland C++ Compiler 5.5 です。
}
No.2ベストアンサー
- 回答日時:
> 使ったコンパイラは Borland C++ Compiler 5.5 です。
とのことですので、IEEE754(IEC559)に限った話として回答します。
> 1) 10進で 0.5 の2進指数表現は 0.0111111*10^0 ということなのでしょうか。もしそれで正解なら、どうして 0.1*10^0 としないでわざわざ丸め誤差を含む無限小数で表すのでしょうか。
たとえばfloat型の場合、最上位ビットが符号ビット、続く8ビットが指数部、下位23ビットが仮数部です。
0.5のビット表現は、
00111111000000000000000000000000
ですが、これは
符号: 0 (正)
指数部: 01111110 (-1)
仮数部: 00000000000000000000000 (1.0)
の意味ですので、1.0×2^(-1) = 0.5 ということになります。
ここで、指数部には+127というバイアスがあります。簡単にいうと、指数部が127 (=01111111) の場合に 2^0 となるという意味です。上記では126ですので、2^(-1)になっています。
なお、指数部表現における基数は、FLT_RADIXマクロを調べればわかります。IEC559では、FLT_RADIXは2になるため、2^(指数部-127)になるわけです。
> (2) 仮数部と指数部のビットは決められていなくて、例えば状況によって仮数部のビットが少なくなり指数部のビットが多くなったりするのでしょうか。
仮数部と指数部のビット幅は固定です。
> (3)仮数部での小数点はどこにあるのでしょうか。
仮数部では、指数部が0の場合を除いて、常に 1.~ であるとして扱われます。そのため、最初の1はビット表現の中には現れません。ビット表現は、すべて小数点以下と考えてください。
> (4)float 型の小数精度は最小6桁ということですが、これは10進で6桁なのか2進で6桁なのか教えてください。
FLT_DIGのことを言われているのかと思いますが、FLT_DIGにせよDBL_DIGにせよ(LDBL_DIGにせよ)、すべて10進数での桁数です。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
Python: 数値を反転させたい
-
整数除算の意味とは?
-
一般のソフトで画像を扱う場合...
-
MIPSアセンブラの問題です。
-
[VBS] 素早くローテート演算したい
-
ビットシフトってどんな時使うの?
-
スロースキャンコンピュータ 加...
-
シーケンス制御についての質問...
-
文字参照は10進数と16進数では...
-
ビット演算子
-
COMETII上で動作するアセ...
-
16進数でのAND演算
-
PLC 命令について
-
アクセス(2003)のVBAでビット...
-
FFTの単精度と倍精度の計算時間
-
A4 持ち込み
-
C言語「K&R」の演習2-9について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
一般のソフトで画像を扱う場合...
-
ビットシフトってどんな時使うの?
-
シーケンス制御についての質問...
-
文字参照は10進数と16進数では...
-
C言語で128bitの2進数のビット...
-
Python: 数値を反転させたい
-
2の補数
-
verilog 符号付加減算(最上位...
-
アクセス(2003)のVBAでビット...
-
命令について
-
符号無し整数xを右にnビット回転
-
算術シフト演算が成り立つ理由...
-
03分22秒36のような時間の単位...
-
16進数でのAND演算
-
[VBS] 素早くローテート演算したい
-
整数除算の意味とは?
-
Javaの問題について
おすすめ情報