演習 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. 符号部が ? なのでマイナス記号は付けない
指定した場所で上の穴埋め問題を解いて下さい。
演習 3-3 (個人): サンプルプログラムを使って、演習3-1の値や特殊な値が実際にコンピュータ内でどのように浮動小数点数(単精度)で表されているのか確認してみましょう
フォルダ「FP_3_3」を新規作成し、その中に移動します
フォルダ「FP_3_3」の中で新規に 1 つソースを作ります。ファイル名を「Main.cpp」とします。
Main.cpp にテンプレートをコピーします。
実行確認します。
指定場所に「ソース」「出力結果」を貼り付けて下さい。
演習 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 にテンプレートをコピーします。
一旦コンパイルして実行します。
テキストの桁落ちの例を確認します。
確認が終わったらコメントに従って解答してください。
コンパイルして実行します。
指定場所に「ソースコード」と「実行結果」を記入して下さい。