計算機イプシロン

計算機イプシロン（けいさんきイプシロン、）は、浮動小数点数において、「1より大きい最小の数」と1との差のことである。機械イプシロン（きかいイプシロン）とも言う。また、それぞれの「イプシロン」はエプシロンとも表記される。

概要 
コンピュータで扱われる浮動小数点数は、指数部と仮数部に分かれており、単に小さい数を表すだけであれば指数部を小さくすれば表現が可能である。一方、「1より大きい最小の数」のような場合は、仮数部を使って微小な差を表現することとなる。その限界が計算機イプシロンである。

 進法で  桁の浮動小数点数の場合、計算機イプシロンはとなる。
例えば、IEEE 754のbinary32（単精度）では、、なので、となる。
同様にIEEE 754のbinary64（倍精度）では　となり，binary128（四倍精度）では　となる。

定義の混乱 
元来の定義では上述のとおりとなっているが、一部では「 となる最小の 」という定義、あるいは説明をしている例が存在する。後者の定義では、浮動小数点演算の丸め処理の定義に依存して値が変化してしまうため、厳密には同じでない。

各プログラミング言語での対応

C言語 
C言語においては、<float.h>でFLT_EPSILON、DBL_EPSILON、LDBL_EPSILONというマクロ定数が定義されており、それぞれfloat型、double型、long double型の計算機イプシロンの値となっている。

C++ 
C++ではテンプレートを利用したstd::numeric_limits<T>::epsilon()関数が定義されている。返却される値は前述のC言語の定数と同値である。

.NET 
Microsoftの.NET Frameworkの基本クラスライブラリに、System.Double.Epsilonという定数フィールドが定義されているが、これは浮動小数点方式で表現可能な最小の正の非正規化数であり、計算機イプシロンではない。

Julia 
Julia は標準で計算機イプシロンを取得する関数があり eps(Float32) のように使用する。

脚注

関連項目 
誤差

コンピュータの算術
数学に関する記事

it:Epsilon di macchina