NJȓǜȒǢȈ ǿȕǘȑȈ
ǿȕǘȑȈ
ǿȕǘȑȈ
図7.1: 問題、アルゴリズム、プログラムの関係
様々な数値がコンピュータの中にどのように格納されているかを知ることはコンピュータを深く
2
理解していく上で不可欠の事柄です。この章からはプログラミングから一旦離れ、コンピュータ内
3
のデータの話に移ります。
4
コンピュータのメモリには様々な情報を格納できます。それらの情報の代表的なひとつが数値で
5
す。コンピュータの数値の表現は二種類に大別されます(下図参照)。ひとつは
整数
、も6
うひとつは
小数点数
です。小数点数には固定小数点数と7
浮動小数点数
の二種類があります。8
ঊƣہ
তঊ
ࣦঊஊঊ
തࣦঊஊঊ ۋୖࣦঊஊঊ
図 8.1: 数値の種類
Scratchプログラミングではその辺りを曖昧にしたままプログラミングについて述べてきました
9
が、そろそろ数値について詳細に知るべき段階になりました。と言うのも、コンピュータの中の数
10
値はしばしば奇妙な挙動を示すからです。
11
整数とは、..., −3,−2,−1, 0, 1, 2, 3, ...などの、負の自然数、0、正の自然数のことです。最
12
近のコンピュータでは、−231(=−2,147,483,648)から231−1(=2,147,483,647)の範囲の整数
13
を主に扱います。しかし整数だけでは0.5のような、絶対値が1よりも小さい数値を扱うことがで
14
きません。また、これよりも大きな数の扱いができません。このような数の表現のために、コン
15
ピュータでは浮動小数点数が考え出されました。
16
86
point number)と浮動小数点数(floating-point number)の二種類の形式があります。しかし固定
4
小数点数が用いられることは皆無に等しく12、コンピュータで扱う小数点数のほとんど全ては浮
5
動小数点数という形の数値です。
6
浮動小数点数とは、読んで字の如く、小数点が数値の上を浮動3する形式の数値です。これだけの 説明ではチンプンカンプンですから、たとえば123.45という数値を考えましょう。これは別の表現 では1.2345×102と表すことができます。また77777は7.7777×104、0.034567は3.4567×10−2、
−3.1415は−3.1415×100と表すことができます。いま示した四つの数値:
1.2345×102、7.7755×104、3.4567×10−2、−3.1415×100
の共通点は、いずれも0でない数字が1の位(くらい)から始まるように小数点の位置が調整され ている点です。その調整のために10nという倍数を用いています。この調整によって、如何なる数 も必ず
a1 . a2a3· · ·ak×10n
という形式で表すことができます。この形式を浮動小数点数の正規形(normal form)と呼びます。
7
あるいはこの表現を単に浮動小数点数と呼びます。またa1.a2a3· · ·akの部分を
仮数部
8
(significand)、nの部分を
指数部
(exponent)と呼びます。仮数部の長さkは有限か9
つ固定です。ここではk= 5とします4。
10
さて、ここで浮動小数点数の(正規形の)四則演算例をいくつか示します。まず以下の加算を考 えましょう。
4.0000×102+ 7.0000×102
→ 11.0000×102
→ 1.1000×103
上の計算では、和11.0000×102を正規形1.1000×103へ変換しています。次の加算:
4.0000×101+ 9.7000×102
1固定小数点数が用いられない理由は、実用上はそれが整数で代用できるためです。簡単に説明すると、たとえば「小数 点以下を3桁まで扱う」と約束した場合、それらの数を1000倍すると必ず整数値になります。よって整数値さえ扱うこと ができれば、わざわざ固定小数点数を特別に扱う必要はないのです。
2この授業でも固定小数点数を講義しません。それを講義すると混乱する学生が出てくるからです。
3「浮動(floating)」という語は、フラフラと動き、落ち着きのない様子を想起させますが、浮動小数点数について、そ の連想はあながち間違いではありません。
4実際のコンピュータのkの長さは、10、20、40などの大きな数です。後に述べるように、浮動小数点数には誤差が付 きまといますから、k= 5くらいの長さでは実用に耐えません。ここでは説明の便宜上、小さなkにしました。
→ 1.0100×103
では、加算する二つの数の指数部が異なります。そこで、まず、大きい方の数に指数部を揃えます。
そして仮数部どうしを加算し、最後に正規形へ変換しています。乗算:
2.0000×102∗8.0000×104
→ (2.0000∗8.0000)×10(2+4)
→ 16.0000×106
→ 1.6000×107
では、仮数部どうし、指数部どうしで乗算し、その後に正規形へ変換します。
1
このように、任意の正規形の浮動小数点数どうしで四則演算を行い、正規形の浮動小数点数を求
2
めることが可能です。
3