浮動小数点数の仮数部の桁合わせは何と呼ぶか
基本情報技術者試験 平成29年度春期 午前 問2 / 基礎理論 › 離散数学
過去問にチャレンジ
0以外の数値を浮動小数点表示で表現する場合,仮数部の最上位桁が0以外になるように,桁合わせする操作はどれか。ここで,仮数部の表現方法は,絶対値表現とする。
- ア
切上げ
- イ
切捨て
- ウ
桁上げ
- エ
正規化
会話形式の解説
講師今回は浮動小数点数の用語の問題です。仮数部の先頭の桁が0以外になるように桁をそろえる操作の名前を答えます。まず、浮動小数点数が何と何の組で値を表すかを思い出しておきましょう。
受験者仮数部と指数部ですね。選択肢に切上げや切捨てもあるので、端数の処理と関係があるのかと少し迷いました。
講師そこが引っかけどころです。同じ値でも、仮数部の桁をずらして指数部を調整すれば、いろいろな書き方ができます。問題が聞いているのは、その中から「最上位桁が0以外」という決まりで書き方を一つに決める操作です。値の端数を削る話ではありません。
受験者そうすると、切上げも切捨ても端数をどうするかを決める丸め方なので、桁の位置をずらす操作とは違うということですね。
講師そのとおりです。切上げは端数があればその桁を一つ増やす方法、切捨ては指定した桁より下を捨てる方法です。切り捨てた後でも仮数部の先頭に0が残ることはあるので、最上位桁が0以外になるとは限りません。
受験者桁上げも「桁」という言葉が入っていて紛らわしいです。上の桁へずらすという意味ではないのでしょうか。
講師桁上げは、加算などでその桁に入りきらず、一つ上の桁へ1が繰り上がることです。演算の途中で起こる現象を指す言葉で、表し方をそろえる操作ではありません。残る正規化が、仮数部をシフト(桁移動)して最上位桁を0以外にし、移動した分だけ指数部を調整する操作です。
受験者具体的な数で確かめたいです。0.1875ならどうなりますか。
講師0.1875は2進数で0.0011です。先頭に0が二つ余分にあるので、2桁左へずらして指数を2減らすと、になります。これで仮数部の最上位桁が1になりました。
受験者先頭の余分な0がなくなるので、限られた仮数部の桁を有効に使えるということですね。答えは正規化だと分かりました。
講師はい。正規化すると有効桁数が最大になり、精度が上がります。また、0には0以外の桁がないので正規化できません。問題文に「0以外の数値」とあるのはそのためです。参考までに、IEEE 754の2進形式では、正規化した数の仮数の最上位ビットは1とみなされ、その1は実際には格納しません。正規化できる範囲より小さい極めて小さな値は、非正規化数として扱われます。
まとめ
浮動小数点数は仮数部と指数部の組で値を表すため、同じ値でもいくつもの書き方ができます。仮数部をシフトして最上位桁を0以外にし、ずらした分だけ指数部を調整して書き方を一つに決める操作が正規化です。切上げと切捨ては端数を処理する丸め方、桁上げは演算で上の桁へ1が繰り上がる現象で、どれも正規化とは別のものです。正規化すると先頭の余分な0がなくなるので、有効桁数が最大になり精度が上がります。
解答・解説
正解はエです
この問題のテーマ
浮動小数点数で、仮数部の最上位桁が0以外になるように桁をそろえる操作の名前を問う問題です。
解き方の考え方
浮動小数点数は、仮数部と指数部の組で数値を表します。同じ値でも、仮数部の桁をずらして指数部を調整すれば、いろいろな書き方ができます。そこで「仮数部の最上位桁を0以外にする」というルールで表し方を一つに決める操作が正規化です。各選択肢の用語がこの操作を指しているかどうかを確かめると、答えはエになります。
選択肢ごとの解説
- ×ア 切上げ切上げは、ある桁より下に端数があるとき、その桁の値を一つ増やして端数をなくす丸め方です。値の端数をどう処理するかを決める操作なので、仮数部の桁位置をずらして最上位桁を0以外にする働きはありません。
- ×イ 切捨て切捨ては、指定した桁より下の部分を捨てる丸め方です。切捨ての後でも仮数部の先頭に0が残ることはあるので、最上位桁が0以外になるとは限りません。問題の桁合わせとは別の操作です。
- ×ウ 桁上げ桁上げは、加算などの結果がその桁に入りきらず、一つ上の桁へ1が繰り上がることをいいます。演算の途中で起こる現象を指す言葉で、数値の表し方をそろえる操作ではありません。
- ○エ 正規化正規化は、仮数部を桁移動(シフト)して最上位桁を0以外にし、移動した分だけ指数部を調整する操作です。問題文の説明にそのまま当てはまります。たとえば0.1875は2進数で0.0011なので、2桁左へずらして指数を2減らすと、に正規化できます。
補足
IEEE 754の2進形式では、正規化した数の仮数の最上位ビットは必ず1になります。正規化の範囲より小さい極めて小さな値は、非正規化数として扱われます。
POINT
- 正規化とは、仮数部の最上位桁が0以外になるように仮数をシフトし、その分だけ指数を調整する操作です。
- 正規化すると先頭の無駄な0がなくなるので、限られた仮数部の桁数を有効に使えます。その結果、有効桁数が最大になり精度が上がります。
- 切上げと切捨ては丸めの方法で、桁上げは演算で上の桁へ繰り上がることを指します。どれも正規化とは別の概念です。
- 0には0以外の桁がないため、正規化することはできません。
