
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で質問しましょう!
似たような質問が見つかりました
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- 情報処理技術者・Microsoft認定資格 情報技術の問題についてです。 10進数の−36を以下のような16ビットの浮動小数点表示にするといくつ 3 2022/05/21 19:53
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- C言語・C++・C# C++言語の16進数の表現についておしえてください 1 2022/11/14 17:46
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- 計算機科学 浮動少数点数で、16ビットで数値を表すとき、 1.0の指数部のビットパターンは、下駄が15なので、0 1 2023/02/07 11:10
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- 計算機科学 8ビット浮動小数点数 0 1000 100 を10進法 8ビット浮動小数点数 1 1100 011 3 2022/10/28 08:07
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C#でTreeViewのCheckBoxのサイ...
-
最初に聞かれたこと
-
visual studio 2022でのC#プロ...
-
【C言語】全角文字の配列を、全...
-
VisualStudio2022でC言語プログ...
-
C++でデスクトップGUIアプリ開...
-
大量のデータを読み込んで表示...
-
プログラム言語について c言語...
-
C#でログファイルにファイルパ...
-
c言語
-
C言語 1から20までの逆数の和を...
-
C言語の関数のextern宣言
-
あってる
-
UART通信の取説で,left floati...
-
逆コンパイルと逆アセンブルの...
-
右ビットシフト
-
C言語 バッファについて。
-
データの外挿について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
ビットシフトってどんな時使うの?
-
C言語で128bitの2進数のビット...
-
シーケンス制御についての質問...
-
PS3に搭載されている"Cell"は、...
-
文字参照は10進数と16進数では...
-
一般のソフトで画像を扱う場合...
-
情報科学の飽和演算、ラップア...
-
エクセルVBAのIf,Then 構...
-
符号無し整数xを右にnビット回転
-
C言語やC++言語でビット毎に値...
-
アクセス(2003)のVBAでビット...
-
verilog 符号付加減算(最上位...
-
浮動小数点数の内部表現につい...
-
命令について
-
visualbasic のコード中で 100...
-
スロースキャンコンピュータ 加...
-
16ビットCPUで32ビットの計算方法
-
整数除算の意味とは?
おすすめ情報