7

これは、一般的なExcelユーザーだけでなく、プログラミングの経験がある人に向けた質問のようです。したがって、スーパーユーザーではなく、ここで質問します。

イプシロン(つまり、Excelの計算で表現できる最小の非ゼロ数)を返す方法はありますか?できれば関数を使用してください。関数を介して取得できない場合、コンパクトな関数を使用して計算する簡単な方法はありますか?

明確にするために、私はVBAベースのソリューションを探していません。マクロを実行する必要のない、Excelの数式/スプレッドシートベースのソリューションが必要です。

オンラインでの私の検索では、シンボルイプシロンを表示する方法についての議論がほとんどでした。

ありがとう。

4

3 に答える 3

8

Excelは常にIEEEdoubleで動作します。

0より大きい最小の非正規化されていない浮動小数点数を取得する非VBA式は次のとおりです。

=2^-1022

一方、マシンイプシロンは、1に加算できる最小の数値であり、結果として1より大きい数値になります。倍精度の場合、次の式で与えられます。

=2^-52
于 2012-02-21T18:03:50.310 に答える
4

Microsoftは、XLの浮動小数点数の精度制限を定義しています。最小の浮動小数点数は、Microsoftサポート記事ID:78113に2.2250738585072E-308としてリストされています。スプレッドシートにこの数値を入力すると、実際には浮動小数点0が格納されますが、2.2250738585073E-308(最下位桁に1を追加)を格納すると、すべての桁が表示されます。計算機イプシロンを求められたようですが、XLを使用しているため、実際に表示されるのはC /C++浮動小数点ライブラリイプシロンです。Microsoft Developer Network xlfRegister(フォーム1)のトピックを参照してください。

于 2012-02-21T16:09:27.840 に答える
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を取得できるので、奇妙です。

編集

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

取得:-2,78E-17

于 2012-02-21T15:38:43.607 に答える