計算機内部の数値表現

情報数値解析
第1回
計算機内部の数値表現
第1回・計算機内部の数値表現
情報数値解析 – 1 / 19
情報数値解析
✔
授業の概要
数値計算を行なう際には,ブラックボックス的なツールとして利用
するだけでなく,アルゴリズムの理論的な背景を理解することが重
要である.この講義では,様々な数値計算の過程に内在している数
理的な側面と有効な応用方法について解説する.
✔
授業の到達目標およびテーマ
計算機で現象をシミュレーションする際に数学の果たす役割を理解
する.
✔
キーワード
数値計算,数値解析,誤差評価
第1回・計算機内部の数値表現
情報数値解析 – 2 / 19
第 1 回・計算機内部の数値表現
✔
講義の目的:
ほとんどの計算機の内部では,実数値が 2 進法の浮動小数点形式と
いう特別な形で処理されます.今回は,計算機における数の表現方
法を紹介し,有限の操作によって発生する誤差について考えます.
✔
参考文献:
✘
W. Kahan, IEEE Standard 754 for Binary Floating-Point Arithmetic,
http://www.cs.berkeley.edu/∼wkahan/ieee754status/IEEE754.PDF
✘
D. Goldberg, What Every Computer Scientist Should Know About
Floating-Point Arithmetic,
http://docs.sun.com/source/806-3568/ncg goldberg.html
✘
大石 進一, 精度保証付き数値計算,コロナ社,2000.
第1回・計算機内部の数値表現
情報数値解析 – 3 / 19
講義のポイント
1. 現在のほとんどの計算機における数値表現は 2 進数で表現される.
2. 2 進数と 10 進数との違い.
3. 実数は浮動小数点数で表現される.
4. IEEE 標準 754 での実数表現.
第1回・計算機内部の数値表現
情報数値解析 – 4 / 19
2 進法
多くの計算機の内部では,数を 2 進法 (binary) で取り扱う.
✔
理由: 計算が効率よく行なえる,記憶場所を有効に利用できる,など.
2 進法は数を 2n (n は整数) の組合せ (ただし n は 1 回だけの使用) で表す.
j
an 2n ,
i, j : 自然数
n=−i
各係数 an は 0 または 1 である.その係数を n が大きい順に並べた
aj aj−1 . . . a1 a0 .a−1 . . . a−i
を 2 進法表現と呼ぶ.10 進法と区別するために以下の様に区別すること
がある.
10)10 = 1010)2 ,
100)10 = 1100100)2.
第1回・計算機内部の数値表現
情報数値解析 – 5 / 19
2 進法表現の例
●整数の例
360 = 256 + 64 + 32 + 8
= 1 × 28 + 0 × 27 + 1 × 26 + 1 × 25 + 0 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 0 × 20
360)10 = 101101000)2
●小数の例
0.15625 = 0.125 + 0.03125
1
1
+
=
8 32
= 0 × 2−1 + 0 × 2−2 + 1 × 2−3 + 0 × 2−4 + 1 × 2−5
0.15625)10 = 0.00101)2
第1回・計算機内部の数値表現
情報数値解析 – 6 / 19
2 進数と 10 進数の変換
整数の場合,2 進法と 10 進法は正確に変換することができる.
一般に,10 進数の有限桁で記述できる数が必ずしも 2 進
数の有限桁で表現できるとは限らない.
例えば 1/5 は 10 進法では 0.2 だが,2 進法にすると
0.001100110011001100 · · ·
と無限小数になり,有限桁数では正確に表現できない.この他 0.1, 0.07
など 10 進法の簡単な有限小数で厳密に表すことのできる数の多くが 2 進
法だと無限小数となり,近似的な計算しかできなくなる.
これは,2 進数や計算機の問題ではなく,10 進数での ‘感覚’ が 2 進数と異なるため.
第1回・計算機内部の数値表現
情報数値解析 – 7 / 19
ビットとバイト
✔
2 進法の 1 桁をビット (bit; binary digit) という.
ビットは (実質) 桁数の単位として用いられる.
✔
8 ビットをバイト (byte) という.
バイトは計算機内部の情報の単位として用いられる.
✘
✘
✔
英字 ... 1 バイト
漢字 ... 2 バイト
メモリや周辺機器で良く使われる単位
✘
✘
✘
✘
✘
MB = 106 バイト (または 220 バイト; MiB)
GB = 109 バイト (または 230 バイト; GiB)
TB = 1012 バイト (または 240 バイト; TiB)
PB = 1015 バイト (または 250 バイト; PiB)
EB = 1018 バイト (または 260 バイト; EiB)
第1回・計算機内部の数値表現
情報数値解析 – 8 / 19
計算機における整数表現
整数は 4 バイト(32 ビット)または 8 バイト(64 ビット)で表現される
ことが多い.以下は 4 バイト表現の例.
2 = 00000000000000000000000000000010
2157 = 00000000000000000000100001101101
負の整数は 231 を加えた値によって表現する.例えば,−2157 は
−2157 + 231 = 2147481491
の 2 進数表示で表現する.ただし本当の 2147481491 との区別をつけるた
め,先頭桁を 1 にする.これを 2 の補数表現 (2’s complement notation) と
呼ぶ.
第1回・計算機内部の数値表現
情報数値解析 – 9 / 19
計算機における整数表現(続き)
2157 = 00000000000000000000100001101101
-2157 = 11111111111111111111011110010011
2147481491 = 01111111111111111111011110010011
−2157 は 2157 の 0 と 1 を最後の桁を除いて反転させた数,また
2147481491 と −2157 の違いは最初の桁.
2 進 32 桁の整数型で表現できる数値の範囲は,最大が
(01111111111111111111111111111111)2 = (231 − 1)10 = (2147483647)10
最小が
(0 − 231 )10 = (−2147483648)10
第1回・計算機内部の数値表現
情報数値解析 – 10 / 19
実数
実数 R は(直観的には)数直線上に乗る要素の集まりのこと.
数直線
《実数のおもな性質》a, b ∈ R
1. 四則演算ができる.a + b, a − b, a × b, a/b (b = 0)
2. 大小関係がある.a ≤ b, a ≥ b
3. 連続している.
✔
✔
切断したら必ずどちらかに端がついている
稠密である
a < b とすれば,a < λ < b となる λ ∈ R が無数にある.
詳しくは微分積分学または実数論の参考書を参照してください.
第1回・計算機内部の数値表現
情報数値解析 – 11 / 19
計算機での実数表現
✔
数式処理的方法
分数・根号・文字などを含む式を「記号処理」の手法で処理する.
✘
✘
✔
Mathematica
有理数演算
数値的方法
数を一定桁数の有限小数で近似して扱う.
✘
✘
数式処理的方法より一般に高速
近似であることに注意
第1回・計算機内部の数値表現
情報数値解析 – 12 / 19
計算機での実数表現(数値的方法)
✔
固定小数点方式 (fixed point format)
小数点位置を一定として計算する方法.
✘
✘
✘
✔
”0.XXXXX” の形で表現される.
利用者はこの形を意識してプログラミングをする.
近年はほとんど使われない.
浮動小数点方式 (floating point format)
実数を
✘
✘
指数部(exponent)
仮数部(mantissa)
の組として表現する.複素数は実数のペアとして表現される.
第1回・計算機内部の数値表現
情報数値解析 – 13 / 19
浮動小数点方式
現在の (事実上の) 標準規格である IEEE 標準 754(The Institute of
Electrical and Electronics Engineers Standard 754) を紹介.
✔
✔
単精度型実数: 2 進 32 桁 (32 ビット)
倍精度型実数: 2 進 64 桁 (64 ビット)
d1 d2
dn
± 1+
+ 2 · · · + n × 2m
2
2
2
として表現し
1. 符合を表すビット (+ か − か)
2. 指数部 m の整数表現
3. 仮数部 d1 , · · · , dn の情報 (0 か 1 か)
を記憶する.0 だけは別扱い.
第1回・計算機内部の数値表現
情報数値解析 – 14 / 19
ビットの振り分け (IEEE 標準 754)
単精度
1 ビット
8 ビット
23 ビット
倍精度
1 ビット
11 ビット
52 ビット
±
d1 d2
dn
+ 2 ··· + n
1+
2
2
2
✔
符合部は正の場合は 0,負の場合は 1.
✔
仮数部の最初の数は 1 に決まっていることから,実際の仮数部は有
効桁数が 1 ビット多く表現できる (けち表現,隠れビット).
✔
指数部はある正数を加えた整数 (L ≤ m ≤ U ) として表現される (バ
イアス表現).
単精度: L = −126, U = 127,
倍精度: L = −1022, U = 1023.
×2
m
符合部
指数部
仮数部
整数型と違い,一部他に使われるビットの組み合わせがある.
第1回・計算機内部の数値表現
情報数値解析 – 15 / 19
特別な数 (IEEE 標準 754)
± 1+
✔
✔
✔
d1
2
+
d2
22
··· +
dn
2n
× 2m で定義できない数のビット表現
0 (零)
∞
非数 NaN (Not a Number)
不当な演算 (例: 0/0 の計算) やオーバーフローの結果
s
0
1
0
1
0
0000
0000
1111
1111
1111
s:符合部; e:指数部; fi :仮数部
e
f1 f2 . . . f52
0000 000 0000 0000 ...0000 0000 +0
0000 000 0000 0000 ...0000 0000 −0
1111 111 0000 0000 ...0000 0000 +∞
1111 111 0000 0000 ...0000 0000 −∞
1111 111 **** **** ...**** **** NaN
*は 0 または 1 の任意の数.ただしすべての*が 0 の場合を除く
第1回・計算機内部の数値表現
情報数値解析 – 16 / 19
オーバーフローとアンダーフロー
✔
✔
演算結果が表現可能な数の限界を越えることをオーバーフロー
(overflow),またはあふれとよぶ.
絶対値が浮動小数点演算で表現できる数より小さくなることをアン
ダーフロー(underflow),または下へのあふれとよぶ.
アンダーフローを起こした場合,多くの処理系はその結果を 0 とみなし
て処理を継続する.オプションを用いて計算を止めることも可能.
整数 (4 バイト)
単精度実数
倍精度実数
オーバーフロー
231 = 2147483648
(2 − 2−23 ) × 2127 ≈ 3.4 × 1038
(2 − 2−52 ) × 21023 ≈ 1.7 × 10308
アンダーフロー
—
2−126 ≈ 1.1 × 10−38
2−1022 ≈ 2.2 × 10−308
オーバーフロー,アンダーフローの起きる具体的な値
http://www.esa.int/esapub/bulletin/bullet89/dalma89.htm
第1回・計算機内部の数値表現
情報数値解析 – 17 / 19
浮動小数点数の分布
✔
浮動小数点数は加算有限個.
特別な数を除く個数は正確に
2n+1 (U − L + 1)
✔
浮動小数点数は数直線に一様に分布していない.
L = −1, U = 2, n = 4 の例
d1 d2 d3 d4
± 1+
+ 2 + 3 + 4 × 2m
2
2
2
2
第1回・計算機内部の数値表現
情報数値解析 – 18 / 19
有効桁数
10 進での有効桁 (正規化された小数点表記) は
✔
✔
倍精度: log10 253 ≈ 15.95
単精度: log10 224 ≈ 7.22
浮動小数点数は正規化された仮数部で数値を表現するため,これ以上の
桁数の実数を正確に表現することはできない.
実数の近似表現である浮動小数点数を用いた演算の過程で注意すべきこ
とについては次回の講義で説明します.
第1回・計算機内部の数値表現
情報数値解析 – 19 / 19