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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で128bitの2進数のビット...
-
コンピュータが処理できるビッ...
-
「ひまわり」と「なでしこ」の違い
-
符号無し整数xを右にnビット回転
-
0xffffとは?
-
ギルバートモデルの、ビット誤...
-
算術シフト演算が成り立つ理由...
-
ビット立つの意味
-
一般のソフトで画像を扱う場合...
-
アセンブリ言語の質問のコト
-
数値計算における誤差について
-
エクセルVBAのIf,Then 構...
-
シーケンス制御についての質問...
-
CASLIIのCPLとCPAについて
-
8ビットのデータの、先頭ビット...
-
C++ のDLLがdelphiで読めない
-
PC-9801でマシン語を学習するに...
-
昔のゲーム製作に使用する言語...
-
PC-9801 MS-DOSでの実行ファイ...
-
アセンブラからC言語に変換する...
マンスリーランキングこのカテゴリの人気マンスリー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の問題について
おすすめ情報