第2回

平成28年度後期
内容:
2.コンピュータによる問題の数値解法基礎(誤差について)
コンピュータによる問題の数値解法基礎(誤差について)
コンピューターグラフィクス
(コンピューターシミュレーション)
数値計算における誤差の原因
絶対誤差と相対誤差
第2回
誤差の種類
データ誤差,打切り誤差,丸め誤差,桁落ち誤差,
情報落ち誤差
井上 真澄
数値計算における誤差の原因
(4) コンピュータ自身
数値計算では必ず誤差が生じる。
10進数を,コンピュータ内での表現の2進数に変換
→ 無限の小数になる場合には,コンピュータでは有限桁の
数として扱われるため,下位の桁を切り捨てる。
誤差の原因の例を挙げる。
(1) 計算方法
値が非常に近い数の引き算
2-1
2-2
→ 有効桁数が極端に少なくなる
123562.16 – 123561.02 = 1.14
(2) 元データ
・実験・測定で得たデータを用いて計算する場合,データ
に固有誤差が含まれている。
2-3
10進数の0.875 → 2進数の0.111
(0.875 = 0.5 + 0.25 + 0.125 = 2-1 + 2-2 + 2-3) →OK
10進数の0.6 → 2進数の0.100110011…
(0.6 = 2-1 + 2-4 + 2-5 + 2-8 + 2-9 + …)
・円周率πや無理数( など)を有限の少数で近似する。
3
→ 8ビットで表すとすると0.10011001
(3) 打ち切り
→ 2-1 + 2-4 + 2-5 + 2-8 =0.59765626 → 元の値と異なる
無限回繰り返される計算を有限回で打ち切る(無限級数など)
(後の節で誤差の種類について述べる。)
絶対誤差と相対誤差
(近似値)=(真値)+(誤差)
同じ誤差1 mmでも,1 cmの物に対する場合と1 kmの物に対する
場合では近似の度合いが全く異なる。
→ 近似値の精度を表すには相対誤差を用いる。
誤差の定義による分類
近似値をa,真値をAとするとき,
ε =a− A
・・・・aの誤差
εa = | a − A |
・・・aの絶対誤差
a− A
A
・・・aの相対誤差
εr =
近似値の精度を保つため,誤差を許す範囲・・・許容誤差
ε a = | a − A | < ε p を満たすεp ・・・誤差の限界
(→この逆数を桁数で表して精度いう)
相対誤差が0.0001の場合 → 1/0.0001 = 10000 = 104
→ 4桁の精度
誤差の種類
データ誤差 (data error)
数値計算における誤差には以下のような種類がある
(発生原因による分類)。
データ入力の段階で既に存在している誤差
・データの測定誤差
データ誤差
・無限小数を有限小数にしたことによる誤差
離散誤差
打切り誤差
1/3, ,πなどを有限小数で表現して入力する
2
際に生じる
丸め誤差
誤差
桁落ち誤差
情報落ち誤差
など
丸め誤差 (round-off error)
打切り誤差 (cut-off error)
無限回繰り返すべき計算を有限回の計算で打ち切る場合に
生ずる誤差
(例)
sin x = x −
「数を丸める」
・・数のある桁以下の数を切り上げ,切り捨て,四捨
五入(b進数(b = 2pの場合(p-1)捨p入)の場合)
などにより桁数を縮めること
x3 x5 x 7
+ − +⋅⋅⋅
3! 5! 7!
e x = 1+ x +
x2 x3 x 4
+ + +⋅⋅⋅
2! 3! 4!
(x > 0)
ex について説明:
上式を有限項で打ち切って
x2 x3
xn
f n ( x) = 1+ x + + + ⋅ ⋅ ⋅ +
2! 3!
n!
とするときに以下の打ち切り誤差εT(x)が生ずる
εT ( x) = e x − f n ( x)
(例)
・無限小数を有効桁に丸めたときの誤差
計算機では数を有限桁数で表現 (この有限桁は有効桁数という)
→ 扱える桁数以上の桁が無視されることによる誤差が生じる
(先行する0は取り除いて数える0.0023561 = 2.3561×10-3
→ 5桁)
t桁に丸められた数値
・・t桁正しい数値 または 有効t桁の値
桁落ち誤差
円周率 π = 3.14159265358979323846264338…
値の近い数の減算を行ったときに結果の有効数字の桁数が極端に
少なくなることによる誤差。
有効桁数が7桁の計算機の場合 3.141593
(例)
有効桁数が16桁の計算機の場合 3.141592653589793
・有効数字8桁の2つの数1006.1969と1006.1956との減算
・10進数を2進数に変換したときの誤差
10進数の0.1を2進数に変換
0.1 =
2-4
+
2-5
+
2-8
+
2-9
1006.1969 – 1006.1956 = 0.0013
2-12
2-13
+
+
+…
→ (0.000110011001100…)2
8桁
8桁
2桁
→ 2桁のみになってしまう。
【注意】
丸め誤差は数値計算の過程で繰り返し発生し累積する。
・データの読み込み・・真の値を計算機の有効桁数に丸める
・演算・・・演算結果を計算機の有効桁数に丸める
・データの出力・・画面表示・印刷・ファイル書込み等で設定された
最大桁数に丸める
元の有効数字8桁のうち
下1桁に誤差があるとすると・・・信頼できる桁は1桁のみ
下2桁に誤差があるとすると・・・誤差を含んだ桁しか残って
いない
x=
ax 2 + bx + c = 0
・ の解
−b ± b2 − 4ac
2a
x=
b2 >> 4ac
→ の場合,
−b ± b2 − 4ac
2a
x=
− 2c
b ± b 2 − 4ac
b>0
− b + b2 − 4ac ( のとき)
b<0
− b − b2 − 4ac ( のとき)
の計算に桁落ちが生じやすい。
b>0
x=
→ 対策:
− b m b2 − 4ac
分母分子に をかけて変形して
x=
=
=
(−b ± b 2 − 4ac ) (−b m b 2 − 4ac )
2a (−b m b 2 − 4ac )
=
b 2 − (b 2 − 4ac)
2
2a (−b m b − 4ac )
4ac
2a (−b m b 2 − 4ac )
2c
− b m b 2 − 4ac
=
− 2c
b ± b 2 − 4ac
情報落ち誤差
有効桁数が限られているときに,絶対値の大きい数と絶対値
の小さい数を加減算
→ 絶対値の小さい数が無視される
(例)
30000000 + 1の計算
有効数字8桁の場合:
3.0000000×107 + 1.00000000 = 3.0000001×107
有効数字7桁の場合:
3.000000×107 + 1.0000000 = 3.000000×107
b<0
のとき
−2c
−b + b2 − 4ac
x=
の代わりに で計算
2a
b + b2 − 4ac
のとき
x=
−b − b2 − 4ac
−2c
x=
の代わりに で計算
2a
b − b2 − 4ac