1. 浮動小数点数(IEEE754)


演習 3-1 (個人): 10 進数の 48.375 を単精度(32ビット)の浮動小数点数形式の 2 進数に変換してみましょう。

フォルダ「FP_1_12」を「FP_3_1」にコピーして、その中に移動します
「Main.cpp」を開きます
先頭で定義している変数 A の値を 48.375 に変更して実行確認します。int n_int は 8 、int n_decimal は 4 のままで結構です
A の固定小数点数が求まったので、指定した場所で以下の穴埋め問題を解いて下さい。

A = 48.375 とする

1.「符号部」を求める。A はプラス値なので 符号部は ?
2. A の絶対値 |48.375| = 48.375 を固定小数点数形式の 2 進数に
   変換(整数部の桁数 8 ビット、小数部の有効桁数 4 ビット)すると ?
3. 小数点を「?に ? 回」移動して整数部を 0b1 の 1 桁だけにする(※先頭の 2 つの 0 は取り除く)と ?
   ?に ? 回移動したので E = ?
4. 「指数部」を求める。単精度なので E に 127 を足した E = ? を 2 進数に変換して ?
なお今回は表1で示した指数部のビット数と比べると同じビット数(8ビット)なので先頭を0で埋めなくても良い
5. 「仮数部」を求める。(3)で求めた値の先頭から "0b1." を取り除いて M = ?
   表1で示したビット数(23ビット) よりも M の方が短いので、末尾を 0 で埋めて M = ?
6. 符号部、指数部、仮数部の順につなげて 0b を先頭に付けると 48.375 の単精度浮動小数点数は

0b_?_?_?

(注) 見やすいように各部の間にアンダーバーを入れてますが、実際にはアンダーバーは入りません

演習 3-2 (個人): 演習 3-1 で得られた 2 進数を 10 進数に変換してみましょう。

符号部 =?
指数部 = ?
仮数部 = ?

なので

1. 指数部の2進数を 10 進数の整数に変換すると E = ?
2. 単精度なので、E から 127 を引いて E = ?
3. 仮数部の先頭に「0b1.」を追加して固定小数点数に変換すると ? ※ 見づらいので末尾の 0 は省略
4. (3)で求めた固定小数点数の小数点の位置を E = ? 回(?なので?に)移動すると ?
5. (5)で求めた固定小数点数を10進数に戻すと 48.375
6. 符号部が ? なのでマイナス記号は付けない

指定した場所で上の穴埋め問題を解いて下さい。


2. 特殊な値


演習 3-3 (個人): サンプルプログラムを使って、演習3-1の値や特殊な値が実際にコンピュータ内でどのように浮動小数点数(単精度)で表されているのか確認してみましょう

フォルダ「FP_3_3」を新規作成し、その中に移動します
フォルダ「FP_3_3」の中で新規に 1 つソースを作ります。ファイル名を「Main.cpp」とします。
Main.cpp にテンプレートをコピーします。
実行確認します。
指定場所に「ソース」「出力結果」を貼り付けて下さい。


3. 丸め誤差と桁落ち


演習 3-4 (個人): テキストのソース 1 が上手く動くように修正しましょう。

フォルダ「FP_3_4」を新規作成し、その中に移動します
フォルダ「FP_3_4」の中で新規に 1 つソースを作ります。ファイル名を「Main.cpp」とします。
まず Main.cpp にソース1をコピーし、実行して上手く条件判定されないことを確認します。
次に Main.cpp にテンプレートをコピーします。
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
コンパイルして実行します。
指定場所に「ソースコード」と「実行結果」を記入して下さい。


演習 3-5 (個人): テキストの桁落ちの例を確認し、計算手順を工夫して桁落ちによる影響を減らしてみましょう。

フォルダ「FP_3_5」を新規作成し、その中に移動します
フォルダ「FP_3_5」の中で新規に 1 つソースを作ります。ファイル名を「Main.cpp」とします。
Main.cpp にテンプレートをコピーします。
一旦コンパイルして実行します。
テキストの桁落ちの例を確認します。
確認が終わったらコメントに従って解答してください。
コンパイルして実行します。
指定場所に「ソースコード」と「実行結果」を記入して下さい。