少し専門的な誤差の話2
誤差にも色々あります。
・測定で生じる「測定誤差」
・デジタル変換で生じる「量子化誤差」
・計算で生じる「計算誤差」
・標本調査で生じる「統計誤差」
・データ選択で生じる「選択誤差(バイアス)」
・主観で生じる「認識誤差(バイアス)」
前回は測定誤差について解説しました。
今回は量子化誤差と計算誤差について解説します。
量子化誤差
量子化誤差とは、信号をアナログからデジタルに変換する際に生じる誤差です。
例えば音声や動画がそうです。本来は連続的な現実情報ですが、録音・録画の過程で離散的なデジタル情報に置換されます。当然、元の現実情報と比べ損失があります。
量子化誤差は分解能によって直接決まります。例えば、ものさしの最小目盛りや上の例でいうとビデオカメラのfps(1000コマ/秒)がそれにあたります。
少々極論ですが、1か0という限られた情報でしか構成されていない装置を用いて、現実の現象を記録する以上、この誤差は避けらません。
計算誤差
量子化誤差のときと同様、1か0でしか記述できないコンピュータでは、計算時も誤差が生じます。
単純な問題では十分な精度が得られても、少し複雑となると、とんでもない誤差が生じることがあります。
そのようなとき、数値計算の誤差に関する一定の基礎知識を持っているのといないのとでは、対処に大きな差が生じ得ます。
丸め誤差
コンピュータの表現できる範囲(有効桁)を超えてしまった際に、有効桁以降を切り捨てることによって発生する誤差です。
例えば円周率 (π) があります。円周率は無理数であるため、それを現実に小数で表示しようとすると必ず誤差が生じます。
打切り誤差
コンピュータの計算処理を途中で打ち切ることにより発生する誤差です。
よくある例として1 ÷ 3 = 0.3333333...のように無限に続く計算を行う場合、コンピュータは途中で計算を打ち切ります。
桁落ち
値がほぼ等しい数値同士で差を求めた時に有効数字が減ることで生じる誤差です。
例えば、√100001-√100000 という計算を有効数字8桁で行うと 0.31622935×10^3-0.31622777×10^3
= 0.158×10-2 となってしまい、得られた結果の有効な桁は3桁に減少します。
情報落ち
大きな値と小さい値の加減算を行った際に、小さい値の情報が無視されてしまうことで生じる誤差です。
例えば
0.1111 + 0.00002222
= 0.11112222
≒0.1111
0.00002222は有効桁数外であるため省かれています。これが情報落ちです。
対策として、計算順序を(小さな値+中程度の値)+大きな値という様に、大きさの近い計算を先に行うと抑えることができます。
オーバーフローとアンダーフロー
オーバーフローとは、計算結果の桁数が規定を超えることで発生する誤差のことです。
例えば、4バイトの整数で扱える範囲は-2,147,483,647〜2,147,483,647ですが、ここで3,000,000,000を扱おうとすると、数値の範囲が足りずエラーとなります。
アンダーフローは、その逆で、計算結果の小数部分の絶対値が0に近づきすぎて細かい値を表現できなくなることです。
例えば、4バイトの小数で扱える範囲は、3.4×10^-38~3.4×10^38乗ですが、ここで1.0×10^-40のような小さい数値を扱おうとすると、数値の範囲が足りずエラーとなってしまいます。
離散化誤差(切り捨て誤差)
連続的な計算式をコンピューターで有限個の値で表現することで生じる誤差です。
量子化誤差と少し似ていますが、こちらは計算の過程で生じる誤差です。
例えばy=2x^2+5xのグラフを作成するとき、xの値を…0,1,2,3…と一定間隔でスライドさせyの解を逐次求めます。このとき×=1.5の解は×=0と1を結んだグラフ線上にあるように見えますが、実際に計算して得た値ではないため誤差が多少含まれます。
勿論、計算の間隔を狭くすることによって離散化誤差を減らすことはできますが、その分、計算量は増加し時間がかかります。たかが計算量の増加と思うかもしれませんが、本格的な研究では、少しの計算量の増加が致命的となります。
連続関数の計算は困難です。しかし、離散化を行い非連続な数値に置き換えることで、近似的な計算結果を比較的容易に算出することがでぎす。
離散化誤差の影響(幻影解)
微分方程式の数値解法において、離散化誤差が原因で数学的には得られるはずのない解が現れることがあります。これを幻影解といいます。