数の表現と誤差
-丸め誤差と打切り誤差-1
st
. 2020/04/19
L
st
. 2020/05/12
数値計算誤差の分類
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.51, McGraw Hill, 2006
①
Round-off error 丸め誤差
②
Truncation error 打切り誤差
① コンピュータのメモリー制限で、無限小数は有限桁でしか扱
えない。(どこかの桁で四捨五入して丸めている)
→ 数値を
有限桁のディジタル表現する際の精度とも言える。
② 数値解は何らかの近似を取り入れた結果である。(本来は
無限小の分割幅を有限幅で近似的に扱ったり、無限級数を
有限級数で扱わざるを得ない)
→ 解析解を近似表現する際
の精度とも言える。
どちらも「無限」を「有限」で表現しようとする所から生じる誤差
数値計算誤差=解析解(厳密解)と数値解(近似解)との相違
の
2種類
2種類の誤差の説明
有効数字
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.51, McGraw Hill, 2006
3
40
50
4 8 . 5
確か
不確か
有効数字3桁
certain
uncertain
アナログメータの例
ディジタルメータの例
8 7 3 2 4
4
5
4
8 7 3 2 4 . 4 5
確か
不確か
certain
uncertain
有効数字
7桁
「有効数字」とは・・・自信を持って使える数値のことで,複数の確かな
数値と1つの見積り数値から成る。
(自信がある)
(自信がない)
.
丸め誤差の例(1)
4エクセルの組み込み関数
π = pi() の表示例
① デフォルトでは小数点以下の桁数
6桁(有効桁7桁)
② アルファベットの書いてある列の右端をクリックして表示桁
を自動拡張すると,小数点以下の桁数9桁(有効桁10桁)
③ セルの書式設定で「数値」→「小数点以下の桁数」を16に
すると17桁表示になるが,このうち有効なのは15桁のみ
つまり,
Excelにおいて,πは有効数字15桁に丸めて計算さ
れること(丸め誤差の発生)を意味している。
π=pi()
①
②
③
の表示
default
double crick セル書式設定(少数16桁)
3.141593 3.141592654
3.1415926535897900
丸め誤差の例(2)
分数5/3の計算結果の表示
Excel
セルの書式設定
表示形式 小数点以下の桁数 分数
5/3 の計算結果
有効桁
標準
9
1.666666667
10
数値
16
1.6666666666666700
15
数値
30 1.666666666666670000000000000000
15
指数表示
0
2.E+00
1
指数表示
10
1.6666666667E+00
11
指数表示
14
1.66666666666667E+00
15
指数表示
20
1.66666666666667000000E+00
15
Excel表示形式は,該当するセルで右クリック,セルの書式設定→
表示形式→標準 or 指数表示 を選択
セルの書式設定で小数点以下の桁数を変更して色々試すと,無限
小数の
5/3も有効桁15桁に丸めて計算されることが分かる。
打切り誤差の例(1)
sin x x
=
31
sin
6
x
= −
x
x
3 51
1
sin
6
120
x
= −
x
x
+
x
1
stapprox.
3
rdapprox.
5
thapprox.
正弦関数
y=sin(x) のマクローリン級数表示例
-3
-2
-1
0
1
2
3
4
0
1
2
3
4
y=sin(x)
x
true value
1st
3rd
5th
sin(x) のマクローリン級数表示
7 ( ) 2 3(0)
(0)
(0)
( )
(0)
(0)
2!
3!
!
n nf
f
f
f x
f
f
x
x
x
n
′′
′′′
′
=
+
+
+
+ +
( ) sin
(0) 0
f x
=
x
f
=
( ) cos
(0) 1
f x
′
=
x
f
′
=
( )
sin
(0) 0
f
′′
x
= −
x
f
′′
=
(3)( )
cos
(3)(0)
1
f
x
= −
x
f
= −
2 3 4 50
1
0
1
( ) 0 1
2!
3!
4!
5!
f x
= + +
x
x
+
−
x
+
x
+
x
+
3 51
1
sin
6
120
x
= −
x
x
+
x
+
(4)( ) sin
(4)(0) 0
f
x
=
x
f
=
(5)( ) cos
(5)(0) 1
f
x
=
x
f
=
f(x)=sin(x)をx=0の近傍でテイラー級数展開(マクローリン級数展開)すると,
右辺各項の導関数を計算すると,
求めた導関数を級数展開の式に戻すと,
整理すると,
正確さと精密さ
8標的に対して
バラツキが少
なく的の中心
に近い
バラツキは小
さいが的外れ
Accuracy
Precision
Imprecision,
Uncertainty
Inaccuracy
誤差の定義
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.53, McGraw Hill, 2006
真値
Round-off
Truncation
真の誤差
(true error)
真のパーセント相対誤差
(true percent relative error)
しかし・・・,現実の問題で真値が求められるケースは,手計算で
理論的に解が得られる場合を除いてほとんどない。
数値計算
の場合
true value approximation
t
E
=
−
true error
100%
true value
tε
=
×
True value = approximation + error
誤差
近似値
(1)
(2)
(3)
【例題1】 真の誤差
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.53, McGraw Hill, 2006
10,000 cmの橋と10 cmの釘がある。それぞれの測定値が9,999 cmと9
cmであったとき,E
tと
ε
tを求めよ。
10000 9999 1 cm
tE
=
−
=
1
100 0.01%
10000
tε
=
×
=
10 9 1 cm
tE
= − =
1
100 10%
10
tε
=
×
=
同じ真の誤差
1 cmでも,釘の相対誤差の方がずっと大きい。
橋
釘
橋
釘
True value : 10000
答え)
近似値の誤差
11S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.53, McGraw Hill, 2006
近似値のパーセント相対誤差
approximate error
100%
approximation
aε
=
×
current approximatation previous appxorimation
100%
current approximation
aε
=
−
×
近似値のパーセント相対誤差
真値が分からない大半の現実問題では,真の誤差は定義はできて
も求められないので,代替えとして近似値の誤差が使われる。
繰り返し計算をして近似精度を上げようとするとき,次式が使われ
ることもある。
(近似精度が改善される前の近似値を使う)
ε
aの値として,一般に
2-3%が判定基準として使われることが多い
が,要求レベルはシステムによって異なる。
(1)
(2)
【例題2】 近似値の誤差
12S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.53, McGraw Hill, 2006
e
0.5をマクローリン級数展開して得られる近似値のパーセント相対誤差
をエクセルの表計算を使って求めよ。
0.5True value :
e
=
1.648721
2 31
2
3!
!
n xx
x
x
e
x
n
= + +
+
+ +
x
n Approx.
TRUE
Et
εt [%]
Ea
εa [%]
0.5 1
1 1.648721271 0.648721271 39.34693403
#VALUE!
#VALUE!
0.5 2
1.5 1.648721271 0.148721271 9.020401043
0.5 33.33333333
0.5 3
1.625 1.648721271 0.023721271 1.438767797
0.125 7.692307692
0.5 4 1.645833333 1.648721271 0.002887937 0.175162256 0.020833333 1.265822785
0.5 5
1.6484375 1.648721271 0.000283771 0.017211563 0.002604167 0.157977883
0.5 6 1.648697917 1.648721271 2.3354E-05 0.001416494 0.000260417 0.015795293
このケースでは近似値は
n=4で1.3%程度,n=5で0.16%程度の相
対誤差となることが分かる。
(1)1.648721 1
100% 39.3%
1.648721
tε
=
−
×
=
(2)1.5 1
100% 33.3%
1.5
aε
=
−
×
=
答え)
数値の表現方法
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.51, McGraw Hill, 2006
①
Fixed point representation 固定小数点
②
Floating point representation 浮動小数点
① 大きさの変動幅が小さい数値,主に整数に適用される。
シンプルだが,表現できる数の範囲は狭い。
② べき乗で表現することにより,対数スケールとの相性が
良くなる。大きさの変動幅が大きい数値(ミクロオーダー
からマクロオーダーの数まで一緒に扱える。)に適用され
る。表現できる数の範囲は広いが,数値刻み幅(分解
能)が変化するデメリットもある。
数値の表現方法
2種類の表現方法の説明
固定小数点による整数の表現
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006
16 bit コンピュータの場合
0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1
符号
1 bit
2
132
122
112
102
92
82
72
62
52
42
32
22
12
02
14±
1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1
173
=
173
= −
15 bit
0 :
1 :
+
−
7 5 3 2 0(2
2
2
2
2 )
173
+
+ + + +
= +
7 5 3 2 0(2
2
2
2
2 )
173
−
+ + + +
= −
上の例では,
①
②
①
②
【例題3】 整数の表現
152
132
122
112
102
92
82
72
62
52
42
32
22
12
02
14±
16ビットコンピュータで表現できる10進数の整数の範囲を求めよ。
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
= +
32767
15( 2
=
−
1)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
= +
0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
= −
0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
= −
32767
32768
≡ −
①
②
③
④
④は③で表現できており,冗長なのでこれを
-32768に割り当てる。
つまり,
-32768 から 32767 を表現できることになる。(実際のコン
ピュータでは負の数を表現するのに
2の補数表現を利用している)
答え)
浮動小数点の表現
16 eR
= ⋅
m b
仮数
底,基数
指数
3156.78 0.15678 10
=
×
+例2)
1/34=0.02941176470… を仮数4桁,基数10の浮動小数点
で表現すると
①は有効桁
3桁(10
-4×
10
0の精度)なので,仮数部を
10倍して指数
部を
1/10すると,②のように有効桁を4桁に増やすことができる
(
10
-4×
10
-1の精度まで保証される)。この処理を
正規化
と呼ぶ。
例1)
156.78 を仮数5桁,
基数10の浮動小数点で表
すと
00.0294 10
×
①
10.2941 10
×
−②
exponent
base
mantissa
指数部
exponent
part
【例題4】 浮動小数点の表現
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006
7 bit 浮動小数点で表現される数 0111100 を10進数で求めよ。
0 1 1 1 1 0 0
2
12
02
-12
-22
-3仮数 m
指数の
大きさ e
指数符号
(
0:+, 1:-)
数値符号
(0:+, 1:-)
± ±
1 01 2 1 2
3
e
= − × + × = −
1 2 31 2
0 2
0 2
0.5
m
= ×
−+ ×
−+ ×
−=
7 bit
30.5 2
0.0625
eR
= ⋅ = +
m b
×
−=
上の例では,
答え)
【例題4】 浮動小数点の表現
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006
7 bit 浮動小数点で表現できる数をすべて求めてグラフ化せよ。
0 1 1 1 1 1 0
1 2 3 3(1 2
×
−+ ×
1 2
−+ ×
1 2 ) 2
−×
+=
7
0 0 1 1 1 1 1
1 2 3 3(1 2
×
−+ ×
1 2
−+ ×
0 2 ) 2
−×
−=
0.09375
0 1 1 1 1 1 1
(1 2
×
−1+ ×
1 2
−2+ ×
1 2 ) 2
−3×
−3=
0.109375
1 2 3 3(1 2
×
−+ ×
1 2
−+ ×
0 2 ) 2
−×
+=
6
0 0 1 1 1 1 0
2
12
02
-12
-22
-3± ±
1 2 3 3(1 2
×
−+ ×
0 2
−+ ×
1 2 ) 2
−×
+=
5
0 0 1 1 1 0 1
0 1 1 1 1 0 1
(1 2
×
−1+ ×
0 2
−2+ ×
1 2 ) 2
−3×
−3=
0.078125
刻み幅
0.015625
=2
-3×2
-3刻み幅
1
=2
-3×
2
+3…
2
-32
+3浮動小数点表示では,同じ仮数
mでも指数部b
eの違いに
よって表現できる数値の刻み幅(分解能)が変化する。
…
0 1 2 3 4 5 6 7 8 Linear scale【続き】 浮動小数点の表現
19S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006
2
+32
+12
-32
-22
-12
02
+2 0.01 0.1 1 10 Log scale2
+32
+12
-32
-22
-12
02
+2 刻み幅1 =2-3×2+3 刻み幅 0.015625 =2-3×2-3答え)
オーバーフローとアンダーフロー
20S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006
0 1 1 1 0 0 1
(0 2
×
−1+ ×
0 2
−2+ ×
1 2 ) 2
−3×
−3=
0.015625
0 1 1 1 0 0 0
(0 2
×
−1+ ×
0 2
−2+ ×
0 2 ) 2
−3×
−3=
0
刻み幅
0.015625
=2
-3×2
-3 1 2 3 3(1 2
×
−+ ×
1 2
−+ ×
1 2 ) 2
−×
+=
7
0 0 1 1 1 1 1
1 2 3 3(1 2
×
−+ ×
1 2
−+ ×
0 2 ) 2
−×
+=
6
0 0 1 1 1 1 0
最小値
0.015625 よりも小さい数は表現できない。
これを
アンダーフローホール
と呼ぶ。
最大値
7 よりも大きい数は表現できない。
これを
オーバーフロー
と呼ぶ。
例え,有理数で有限桁の小数(例えば13/2=6.5)のような区切
りの良い小数であっても,上の場合は刻み幅が
1.0 なので 0.5
の丸め誤差を生じる。これを量子化誤差と呼ぶ。
刻み幅
1
=2
-3×
2
+3IEEE方式(IEEE754形式)
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006
2
32
22
12
02
-12
-22
-23±
0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
① 単精度浮動小数点数型(32ビット=4バイト)
± 2
62
52
42
-32
-42
-22仮数 m : 23bit
指数 e : 8 bit
(符号
1bit含む)
符号
1bit
6 5 4 3 2 1 01 2
1 2
1 2
1 2
1 2
1 2 1 2
127
e
= − × + × + × + × + × + × + × = −
23 71 2
1.19209 10
m
= ×
−=
×
− 23 127 7 381 2
2
1.19209 10
10
eR
= ⋅ = + ×
m b
−×
−=
×
−×
−上の例では,
7(
= − −
2
1)
7 7 2 2 128 1282
2
2
2
eb
−
=
−
38 3910
−10
23 02
2
m
=
−
71.19209 10
−1
=
×
表現
範囲
IEEE方式(IEEE754形式)
S. C. Chapra, Numerical Methods for Engineers, 5thEdition, p.60, McGraw Hill, 2006