2012-02-21 68 views
4

これは、一般的なExcelユーザーではなく、プログラミング経験のある方に向けた質問のように思えるので、ここではスーパーユーザーではなく質問しています。Microsoft Excelでマシンイプシロンを取得

ε(つまり、Excelの計算で表現可能な最小の非ゼロの数値)を返す方法はありますか?それが関数を介して取得できない場合は、コンパクトな関数を使ってそれを計算する簡単な方法がありますか?

VBAベースのソリューションを探しているわけではありません。マクロを実行する必要のないExcel式/スプレッドシートベースのソリューションが必要です。

私のオンライン検索では、イプシロンのシンボルの表示方法についての議論が大半を占めています。

ありがとうございました。

答えて

6

Excelは常にIEEEの倍数で動作します。 0より大きい最小の非正規化されていない浮動小数点数が

=2^-1022 

マシンイプシロンであなたを取得します

非VBAの式は、他の一方で、1に加えることができる最小の数であります結果は1より大きい数値になります。倍精度の場合は

=2^-52 
+0

あなたが何度も必要ならば、それを定義した名前に入れてください。 –

2

次のようなVBAサブルーチンを作成することがあります。

Public Sub ComputeMachineEpsilon() 
    Dim g, ex, eps As Double 
    Dim i As Long 
    g = 1 
    i = 0 
    Do 
     i = i + 1 
     g = g/2 
     ex = g * 0.98 + 1 
     ex = ex - 1 
     If ex > 0 Then eps = ex 
    Loop While ex > 0 

    MsgBox ("No. of Iterations " & i) 
    MsgBox ("Machine Epsilon is " & eps) 

    End Sub 

しかし、私のマシンでは2,22E-16を与え、私はセルに=2^-113を書いて、9,62965E-35を得ることができるので、それは奇妙です。

EDIT

=1*(0,5-0,4-0,1) 

Iが得る:-2,78E-17

+0

ありがとうございました。しかし、私は、非VBAベースのソリューション、すなわちExcel関数またはスプレッドシート機能を使用してEpsilonを返すソリューションを期待していました。私はマクロを実行する必要はありません。申し訳ありませんが、私はこれについて明確ではありませんでした。この点を明確にするために質問を更新しました。ありがとう。 – SSilk

4

MicrosoftはXLのために浮動小数点数の精度の限界を定義します。最小の浮動小数点数は、Microsoft support article ID: 78113に2.2250738585072E-308と表示されます。この数値をスプレッドシートに入力すると、実際には浮動小数点0が格納されますが、2.2250738585073E-308を格納すると(最下位桁に1を加えた)、すべての桁を見ることができます。私はあなたがマシンのイプシロンを求めてきたのを見ましたが、XLを使用しているので、実際にはC/C++の浮動小数点ライブラリイプシロンが表示されます。 Microsoft Developer Network xlfRegister (Form 1) topicを参照してください。

関連する問題