計算機イプシロン

提供: miniwiki
移動先:案内検索

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

概要

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

b進法でp桁の浮動小数点数の場合、計算機イプシロンは[math]b^{1-p}[/math]となる[1]。 例えば、IEEE 754のbinary32(単精度)では、b = 2、p = 24[2]なので、[math]\epsilon=2^{1-24}=1.192\times10^{-7}[/math]となる。 同様にIEEE754のbinary64(倍精度)では [math]\epsilon=2^{1-53}=2.220\times10^{-16}[/math]となり,binary128(四倍精度)では [math]\epsilon=2^{1-113}=1.926\times10^{-34}[/math]となる。

定義の混乱

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

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

C言語

C言語においては、<float.h>FLT_EPSILONDBL_EPSILONLDBL_EPSILONという定数が定義されており、それぞれfloat型、double型、long double型の計算機イプシロンの値となっている[1]

.NET

Microsoftの.NET Frameworkのライブラリに、Double.Epsilonというフィールド(プロパティ)があるが、これは浮動小数点方式で表現可能な最小の正の非正規化数であり、計算機イプシロンではない[4]

Julia

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

関連項目

脚注

  1. 1.0 1.1 1.2 1.3 奥村晴彦 『C言語による最新アルゴリズム事典』 技術評論社、1991年。ISBN 4-87408-414-1。
  2. データとしては23桁であるが、正規化数では先頭に1が補われ、24桁の値となる。
  3. http://msdn.microsoft.com/ja-jp/library/k15zsh48(VS.80).aspx
  4. http://msdn.microsoft.com/en-us/library/system.double.epsilon.aspx に「The value of the Epsilon property is not equivalent to machine epsilon, (略)」とある。

it:Epsilon di macchina