【新感覚Study】誤差の種類をマスターしよう!【応用情報/超分かりやすい】

はじめに

数値計算の世界は一見すると、堅苦しくて退屈そうに思えるかもしれません。しかし、この世界に一歩足を踏み入れると、実は驚きと発見の連続です。微細な計算の中に潜む「誤差」は、まるで魔法のように、私たちの日常生活やテクノロジーの発展に深く影響を与えています。誤差の性質を理解することで、計算の精度を高め、より正確なデータ分析や予測が可能になります。

本記事では、そんな数値計算における誤差について、一緒に学んでいきます。そして結果として、基本情報や応用情報技術者試験にも受かっていこうじゃないか!という感じでやっていきます。

【ここで扱う疑問】

  1. そもそも誤差って何?
  2. 桁落ち誤差ってなに?
  3. 丸め誤差ってなに?
  4. 情報落ち誤差ってなに?
  5. 打ち切り誤差ってなに?
  6. 丸め誤差と打ち切り誤差の違いってなに?
  7. 誤差の対策には何が有効?
p.s.今日の一言は『僕の気持ちは打ち切り誤差みたいに、君に会う前では決して完結しないんだ。』です。具体的な解説は最後でしています。

そもそも誤差って何?

クエスチョン

まず、誤差とは何かを定義しておきましょう。

誤差は、真の値と計算や測定によって得られた値の差を指します。数値計算においては、計算の途中で生じる小さなズレが積み重なり、大きな誤差となることがあります。誤差の理解は、より精度の高い計算結果を得るために不可欠です。

桁落ち誤差ってなに?

クエスチョン
定義と原因

桁落ち誤差は、数値計算の中でも特に発生しやすい誤差の一つです。これは、非常に近い値同士の引き算を行うときに、桁数が大幅に減少することによって生じる誤差です。数値が近い場合、結果として得られる数値は非常に小さくなり、重要な桁が失われることがあります。

具体例

a=12345678.9
b=12345678.8

この二つの数値の引き算を行います。

𝑎−𝑏=12345678.9−12345678.8=0.1

この場合、非常に近い数値同士の引き算を行うと、結果として得られる数値は非常に小さくなります。

しかし、実際に計算機でこれを計算する場合、浮動小数点数の精度の制限により、次のような状況が発生します。

例えば、計算機が小数点以下7桁までしか保持できないとしましょう。

a=1.234567×\( 10^7 \)
b=1.234567× \( 10^7 \)

この状態で引き算を行うと、

𝑎−𝑏=(1.234567×\( 10^7 \) )−(1.234567×\( 10^7 \) )=0

計算機が持つ精度の限界により、小数点以下の情報が失われ、本来の差である0.1が反映されません。

対策

桁落ち誤差を避けるためには、計算の順序を工夫したり、精度の高い数値表現を使用することが必要です。例えば、引き算を行う前に数値を適切に正規化することで、桁落ちを防ぐことができます。また、可能な限り多くの桁数を保持できるデータ型や数値処理ライブラリを使用することも有効です。

丸め誤差ってなに?

クエスチョン
定義と原因

丸め誤差は、数値を有限の桁数で表現する際に生じる誤差です。計算機の内部で使用される浮動小数点数表現は、有限の桁数しか持たないため、どうしても端数を切り捨てたり四捨五入したりする必要があります。

具体例

例えば、\( \frac{1}{3} \)を浮動小数点数で表現すると、0.33333…と無限に続きます。しかし、計算機の内部ではこれを有限の桁数に丸めて表現するため、例えば0.3333となります。この際、丸めた部分が誤差となります。

対策

丸め誤差を最小限に抑えるためには、高精度の計算を行う必要があります。また、可能な限り桁数を多く保持できるデータ型を使用することも有効です。加えて、計算の順序や方法を工夫することで、誤差の影響を減らすことができます。

情報落ち誤差ってなに?

クエスチョン
定義と原因

情報落ち誤差は、異なるスケールの数値を同時に扱う際に、小さな数値の情報が失われることで生じる誤差です。これは、浮動小数点数の精度に限界があるために起こります。

具体例

次のような計算を考えてみましょう:

1.0000000001+1.0×\(10^{-10}\)

ここで、非常に小さな数値 1.0×\(10^{-10}\)が大きな数値 1.0000000001 に加算されます。この場合、結果はほぼ 1.0000000001 と変わらず、小さな数値の情報が無視されてしまいます。

対策

情報落ち誤差を防ぐためには、数値のスケールを揃えることが有効です。また、重要な計算を行う前に数値を正規化することで、誤差を最小限に抑えることができます。

打ち切り誤差ってなに?

クエスチョン
定義と原因

打ち切り誤差は、無限級数や反復計算を有限の回数で打ち切ることによって生じる誤差です。特に、無限級数を近似的に計算する際、ある項で打ち切ると残りの項の情報が考慮されないために発生します。

具体例

例えば、円周率 𝜋を計算するために、テイラー級数を使用することがあります。テイラー級数は、ある関数を無限個の項の和で近似する方法です。円周率 𝜋の場合、次のようなテイラー級数が使われます:

$$ 𝜋 = 4\left(1 – \frac{1}{3} + \frac{1}{5} – \frac{1}{7} + \frac{1}{9} – \ldots\right)$$

この級数は無限に続きますが、実際に計算する際には有限の項で打ち切る必要があります。例えば、最初の10項を使って 𝜋を近似する場合、次のように計算します:

$$ 𝜋 ≈4\left(1 – \frac{1}{3} + \frac{1}{5} – \frac{1}{7} + \frac{1}{9} – \frac{1}{11} + \frac{1}{13} – \frac{1}{15} + \frac{1}{17} – \frac{1}{19} \right)$$

しかし、この方法では無限の項を考慮していないため、真の円周率との間に誤差が生じます。打ち切り誤差とは、この無限級数を有限の項で打ち切ることによって生じる誤差です。つまり、計算したい値に近づくために必要な無限の項が打ち切られるため、真の解との間に誤差が生じます。

打ち切り誤差を減らすためには、より多くの項を使用して計算することが重要です。しかし、計算に必要なリソースや時間が増えるため、最適な打ち切り項数を選択する必要があります。また、他の数値計算手法を使用することも考えられますが、それにも誤差が付きまとうことを理解する必要があります。

対策

打ち切り誤差を最小限にするためには、打ち切る項数を増やすことが有効です。また、必要な精度に応じて適切な打ち切り項数を選ぶことが重要です。さらに、計算方法を工夫して、誤差が少ないアルゴリズムを採用することも一つの方法です。

丸め誤差と打ち切り誤差の違いってなに?

クエスチョン

丸め誤差と打ち切り誤差の違いは、誤差が生じるタイミングとその影響の大きさです。

丸め誤差:
  • タイミング: 計算の最後に数値をまとめる際に生じる。
  • 影響の大きさ: 一般的には小さく、単一の計算結果に対して僅かな差異を引き起こす。
打ち切り誤差:
  • タイミング: 計算の途中で無限の計算を有限の回数で打ち切る際に生じる。
  • 影響の大きさ: より大きく、連続した計算や複数の計算ステップに渡って影響を及ぼす。

つまり、丸め誤差は計算の最後のステップで生じる小さな誤差であり、一般には単一の計算結果に対して僅かな影響しか与えません。一方、打ち切り誤差は計算の途中で無限の計算を有限の回数で打ち切る際に生じる誤差であり、より大きな影響を及ぼすことがあります。

誤差の対策には何が有効?

数値計算における誤差の影響は、実際のアプリケーションにも広く及びます。例えば、天気予報や金融工学、物理シミュレーションなどでは、誤差が蓄積することで予測結果や計算結果に大きな影響を与えることがあります。誤差を最小限に抑えるためには、以下のような対策が有効です:

  1. 高精度のデータ型を使用する:浮動小数点数の代わりに多倍長精度数値を使用することで、桁数の増加に伴う誤差の減少が期待できます。
  2. 計算順序を工夫する:特に引き算や加算の順序を工夫することで、桁落ち誤差や情報落ち誤差を防ぐことができます。
  3. 正規化:数値のスケールを揃えることで、情報落ち誤差を抑えることができます。
  4. 適切なアルゴリズムを選択する:誤差に強いアルゴリズムを選択することで、打ち切り誤差や丸め誤差の影響を最小限に抑えることができます。

まとめ:

ポート番号 summary

桁落ち誤差:非常に近い値同士の引き算で生じる

丸め誤差:切り捨てたり四捨五入したりすることによって生じる誤差

情報落ち誤差:大きな値と小さな値の計算で生じる誤差

打ち切り誤差:無限級数を有限の項で打ち切る(途中でやめる)ことによって生じる誤差

おわりに

本日はここまでです。今日は、誤差をStudy&マスターしてきました!疑問を持ち、それを一つずつ紐解いていくことで、いつの間にか多くの知識が身についていたんです。気が付きましたか?たった、数分であなたは知識は指数関数的に増加しました!

これからも、今日みたいにヌルっと、気づいたら知識が増えてた!みたいなStudyを一緒にしていきましょう!

本日はここで、終わります。ありがとうございました。またお会いしましょう!では、さらばじゃ!

今日の一言

『僕の気持ちは打ち切り誤差みたいに、君に会う前では決して完結しないんだ。』

解説:
この口説き文句は、打ち切り誤差というコンピューターサイエンスの概念に基づいています。打ち切り誤差は、数値計算において、計算過程で生じる有限の桁数による誤差のことです。つまり、計算が完全には終わらない状態を指します。

この文句では、その概念をロマンチックな比喩として使っています。つまり、「僕の気持ちは打ち切り誤差みたいに」と言うことで、「君に会う前では、僕の気持ちは完全には表現されない、完結しない」という意味になります。これは、相手に会うまでの期待やドキドキ感を表していて、相手に会うことで初めて完全な形で感情が表現される、というロマンチックなメッセージを伝えています。

タイトルとURLをコピーしました