機械イプシロン
はじめに
機械イプシロン。あまり聞かないワードですが、つまりは有効桁数の表現方法の一つです。
C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
- 作者: 奥村晴彦
- 出版社/メーカー: 技術評論社
- 発売日: 1991/03
- メディア: 単行本
- 購入: 20人 クリック: 396回
- この商品を含むブログ (96件) を見る
どんな存在
機械イプシロンの定義は、
「1より大きい最小の浮動小数点数と1との差」です。
進数$ p $桁精度の浮動小数点数の機械イプシロンは$ b^{1 - p} $と表現されます。
これは言い換えると、「1に加えたとき1より大きくなる最小の数」とすることができます。
求めてみる
$ b^{1 - p} $はプログラムで簡単に求めることができます。
例えばpythonの浮動小数点数の機械イプシロンを求めてみましょう。
#!/usr/bin/env python # -*- coding:utf-8 -*- e = 1 count = 0 print("'count'", "'e'", "'1 + e'", "'(1 + e) - 1'") while 1 + e > 1: count += 1 print(count, e, 1 + e, (1 + e) - 1) e /= 2
実行結果は以下になります。
'count' 'e' '1 + e' '(1 + e) - 1' 1 1 2 1 2 0.5 1.5 0.5 3 0.25 1.25 0.25 ... 51 8.881784197001252e-16 1.0000000000000009 8.881784197001252e-16 52 4.440892098500626e-16 1.0000000000000004 4.440892098500626e-16 53 2.220446049250313e-16 1.0000000000000002 2.220446049250313e-16
最後の行の2.220446049250313e-16
が機械イプシロンになります。
また、この値は、 $ 2^{1 - 53} $ であり、2進数53桁精度ということになります。
この値は、倍精度浮動小数点数の有効桁数となっていることがわかります。
ref
おわりに
いちいち計算しなくても、浮動小数点数の仕組みを知っていれば精度自体はわかりますが、 実際に計算してみるのもたまにはいいですよね。