
スポンサードリンク
こんにちは、ももやまです。
今回は2進数における小数点記法についてまとめたいと思います。
小数点記法には固定小数点記法と浮動小数点記法の2つがあります。
両者とも説明をしておきたいと思います。
目次 [hide]
スポンサードリンク
1.固定小数点方式
まず、皆さんが思い浮かぶのが固定小数点方式です。
固定小数点は、図のように扱える桁の中の一部を整数部、残りを小数部と固定してしまう方式です。
例えば、8bitのうちの5bitを整数部、3bitを小数部とします。
すると、このような形で2進数を表現することができます。
例えばこの場合は、10011101b は、19.625 となります。
数直線で表現可能な数を表すと……
小数点の部分を固定するため、それぞれ表せる小数は等間隔*1となります。
今回の場合だと、小数部は3ビットなので、1/8ずつ単位で表すことができます。
スポンサードリンク
2.浮動小数点方式
皆さんは化学や物理などで
計算機上で小数を扱う際には、浮動小数点方式が使われています。
計算機上で浮動小数点を扱う際には、以下の3つの部分に分かれます。
符号部:正負を表す部分。必ず1bit。0なら正(もしくは0)、1なら負
仮数部:有効数字部分。必ず「1.XXX」と、整数部分が1になるようにする*2。これを正規化*3といいます。1.XXX の 1 を省略するケチ表現が使われることが多い。
指数部:2のべき乗(2進数なので)で表す。今回はわかりやすく2の補数で表現するが、実際の計算機上では比較などを楽にするために一定数(下で記述)を加算して計算を楽にする。
以上を踏まえると、2進数の浮動小数点表記は必ず次のような表記になります。
たとえば、-5.5を浮動小数点表記にしてみましょう。まずは、1.XXXの形に正規化をします。
このときの括弧内の部分の最大項を
仮数部を10進数で求めると
となります。また、2進数で表現してみます。
符号:負の数なので1
指数部:2乗なので、010となる(2の何乗かを記録)。
仮数部:
仮数部を2進数で表すと、以下のような形に変形することができます。
これらを踏まえ、上の8bit浮動小数点表記にすると、10100110b となります。
数直線で表現可能な数を表すと……
浮動小数点方式の場合、固定小数点方式の場合と異なり、表せる数の間隔は均一とはなりません。
0に近ければ近いほど密度は高く(大きく・濃く)なり、多くの小数を表すことができます。
逆に0に遠ければ遠いほど密度は低く(小さく・薄く)なり、少ない数の小数しか表せなくなります。
また、あまりにも0に近い数を表そうすると浮動小数点方式で表現できなくなります。これをアンダーフローといいます。
スポンサードリンク
3.主要浮動小数点数の規格
現在の主要な計算機では、IEEE754という浮動小数点の規格が用いられています。IEEE754では、単精度(float型)、倍精度(double型)、4倍精度(long double型)の3つにおいて、下の桁数だけ指数部、仮数部の領域が取られています。
符号 | 指数部 | 仮数部 | |
単精度 | 1bit | 8bit | 23bit |
倍精度 | 1bit | 11bit | 52bit |
4倍精度 | 1bit | 15bit | 112bit |
IEEE754の浮動小数点表記では、上で説明した浮動小数点表記の仕様とは若干異なる仕様が追加されています。具体的にいうと、
- 指数部は、数値の大小を比較しやすくするために、2の補数表現を使わずに実際の指数に一定数(例:単精度なら127)足されている。
- 数字以外にも、NaN(数じゃない値)、
なども表すことでオーバーフロー、アンダーフローなどの正常ではない結果にも対応できるようにしている(例外処理に対応)。
があります。
4.2進数の小数点表記における誤差
2進数の小数点表記における誤差の原因として、桁落ち・情報落ち・丸め誤差などがあります。
これらの誤差の原因は、プログラムを書く際には避けて通れない問題なので、必ず頭に入れておくようにしましょう。
これらの誤差については、こちらの記事に具体例を含めてわかりやすくまとめたのでこちらをご覧ください。
(基本情報や情報系大学の期末試験にも頻出項目です。)
5.練習問題
では、練習していきましょう。
問題1
0.7を6bitの固定小数点方式と浮動小数点方式のそれぞれで表して誤差を比べる。つぎの問いに答えなさい。
(1) 最下位ビットから2ビットを小数部、最上位ビットを符号部(0が正で1が負)、残りを整数部とする6ビット固定小数点方式の2進数で0.7を表しなさい。変換後の小数第3位以降は切り捨て、変換後の数値と0.7との誤差の大きさを10進数で答えなさい。
(2) 最下位ビットから3ビットを仮数部、最上位ビットを符号部、残り2ビットを指数部とする6ビット浮動小数点方式の2進数で0.7を表しなさい。
ただし、仮数部はケチ表現、(1.XXXの1を省略)、指数部は2の補数表現とする。
さらに変換後の数値と0.7との誤差の大きさを10進数で答えなさい。
問題2
つぎの中で誤っている文章を1つ選びなさい。
ただし、6bitの浮動小数点方式は、最下位ビットから3bitを仮数部(ケチ表現、1.XXXのXを省略)、最上位ビットを符号部、残り2bitを指数部(2の補数表現を用いる)とする。
- 固定小数点方式2進数を数直線上で考えると、表現できる小数の密度は均一となる。
- 浮動小数点表現では、数直線上において、0から遠くなればなるほど表現できる小数の密度は低く(小さく)なる。
- 2.875は丸め誤差なしに6bitの浮動小数点方式で表現できる。
- 0.75は丸め誤差なしに6bitの浮動小数点方式で表現できる。
問題3
3141.5を丸め誤差なしで浮動小数点で表現したい。
このとき、仮数部と指数部はそれぞれ何ビットずつ必要か答えなさい。
ただし仮数部はケチ表現( 1.XXX… の 1を省略)、指数部は2の補数表現を用いるものとする。
問題4
浮動小数点表示法における仮数が正規化されている理由として,適切なものはどれか。
[基本情報技術者試験 平成19年春期問4]
ア:固定小数点数とみなして大小関係が調べられるようにする。
イ:四則演算のアルゴリズムが簡素化できる。
ウ:表現可能な数値の範囲を拡大する。
エ:有効数字のけた数を最大に保つ。
問題5
浮動小数点に関する次の記述を読んで、設問1~4に答えよ。
[基本情報技術者過去問題 平成27年秋期 午後問2]
(1):符号部(ビット番号31)
(2):指数部(ビット番号30~23)
(3):仮数部(ビット番号22~0)
(4):
なお、値の記述として、単に
設問1
0.625を単精度表現したときに指数部に入る値として正しい答えを解答群の中から選べ。
ア:
エ:
設問2
次の単精度表現された数値として正しい答えを、解答群の中から選べ。
値:0 | 0111 1110 | 100000…0
ア:0.125 イ:0.25 ウ:0.375 エ:0.5
オ:0.75 カ:1.5
設問3
次の記述中の
2つの浮動小数点AとBの加算を行う。
A: 0 | 1000 0100 | 100000…0
B: 0 | 1000 0011 | 100000…0
AとBの加算を次の①、②の手順で行う。
① 指数部の値の大きい方に合わせる。 Aが
② 加算を行う。
aに関する解答群
ア:0.001 イ:0.01 ウ:0.011 エ:0.1 オ:0.11 カ:1.1
bに関する解答群
ア:3 イ:4 ウ:5 エ:6 オ:130 カ:131 キ:132
設問4
次の記述中の
設問3のAについて、A×10 の値は、次の①~③の手順で求めることができる。
① A×8の値を求める。
② A×2の値を同様に求める。
③ ①と②の結果を加算する。
加算結果を単精度表現すると、
cに関する解答群
ア:0 | 0000 1000 | 111000…0
イ:0 | 0000 1000 | 111100…0
ウ:0 | 1000 0111 | 111000…0
エ:0 | 1000 0111 | 111100…0
オ:0 | 1000 1000 | 111000…0
カ:0 | 1000 1000 | 111100…0
6.練習問題の解答
問題1
0.7を2のべき乗で表す。
(1) 固定小数点表記を考える。 整数部は0、小数部は2ビットなので
(2) 0.7を2のべき乗で表したものを、
また、仮数部は上位3桁(整数の1は省略なので小数第3位)まで表せるため、
0.7は正なので符号は0、よってこれを順番通りに並べると011011となる。
また、10進数に戻すと、
問題2
正解:3
それぞれの選択肢を見ていく。
6bit小数点の指数部は2の補数表現なので、
- 正しい。固定小数点なので表現できる数値の密度は均一。
- 正しい。浮動小数点は0から遠ければ遠くなるほど表現できる数値の密度は小さくなる。
- 誤り。2.875は、
と変形できる。このとき指数部は なので誤差なしで表せるが、仮数部が の項まであるため、正しく計算することができない。 - 正しい。0.75は、
と変形できる。このとき指数部は なので誤差なしで表せ、仮数部が の項まであるため、正しく計算ができる。
問題3
解答:仮数部12ビット 指数部5ビット。
まずは3141.5を 1.XXX × 2^Y の形にする。
2のべき乗の中で、一番大きい項は
よって仮数部は
また、指数部は11乗であり、
さらに補数表現なので符号を表す1ビットを付け足すので合計5ビット。
解答4
解答:エ
正規化は、有効桁数を最大に保つために行われる。
解答5
設問1
解答:イ
このときの指数部は
指数部は
すると、0111 1110 となる。あとはこれを16進数に変換するだけ。
よって答えはイの
設問2
解答:オ
符号部:0
指数部:0111 1110
仮数部:1000…0
である。これを順番に10進数の形にする。
まずは指数部を10進数に直す。
つぎに仮数部を直す。1000…0 ということは、小数部分は
設問3
解答:a. オ b. イ
まずは、Bの単精度表現を読み取る。
符号部:1
指数部:1000 0011
仮数部:1000…0
符号部は1のため、負の値である。
指数部を10進数に直す。
仮数部を直す。1000…0 ということは、 小数部分は
今回は
あとは計算するだけ、
設問4
解答:ウ
A×8の値は
A×2の値は上の誘導と同じように計算する。
よって
符号部は正なので0
指数部は
指数部は
すると、1000 0111 となる。
仮数部は、
よって答えはウの 0 | 1000 0111 | 111000…0 となる。
7.さいごに
今回は、2進数で小数点を表す方法として、固定小数点表記と浮動小数点表記のまとめを行いました。
特に浮動小数点表記のほうが、計算機上で小数を表すのに大切になってくるので浮動小数点表記に慣れましょう。
次回は、計算機の誤差(桁落ち、情報落ち、丸め誤差)についてのまとめていこうと思います。
関連広告・スポンサードリンク