計算機イプシロンの求め方

 計算機イプシロンεはそのコンピュターで1より大きい最小の値と1との差とか、1と1+εの差が認識できる最小のεの値とも説明されていますが、後者を「1と1+ε」が等しくない最小のεと理解すると、その値は違うと思います。
 前者は、0.000000………という値、1e-300などという値ですが、
 後者は、1.000000………という値なので、1+1e-300 というような値は少数の丸め処理で桁が落ちてしまいます。(きちんと解説されているサイトをみると定義の混乱があり、後者は計算機イプシロンではないようです。)

 ただ、現実の場面で直面するのは後者(丸め誤差)が多いと思います。

 よくある計算機イプシロンの求め方は、以下のように1を繰り返し2で割って、その結果が0としか認識されなくなった時の直前の値を計算機イプシロンとするものです。コードはExcel VBAです。

Sub epsilon()
    Dim d As Double
    Dim dpost As Double
    d = 1
    Do
        dpost = d
        d = d / 2
    Loop Until d = 0
    Debug.Print dpost
End Sub

これを実行すると、わたしのPCでは
4.94065645841247E-324
でした。

 1と1+εが認識できる最小の値ということであれば、小さくした値に1を足して、それと1の差が認識できなくなった直前の値を求めればよいと思います。

Sub epsilon1()
    Dim d As Double
    Dim dpost As Double
    d = 1
    Do
        dpost = d
        d = d / 2
    Loop Until d + 1 = 1
    Debug.Print dpost
End Sub

これを実行すると、わたしのPCでは
2.22044604925031E-16
でした。つまり、倍精度でも「16桁ぐらいで桁落ちする」ということです。

(注)きちんと理解していないので誤った書き方になっているかもしれません。定義や計算方法、その応用については、参考書や良質なサイトをご覧ください。


応援してやろうということで、お気持ちをいただければ嬉しいです。もっと勉強したり、調べたりする糧にしたいと思います。