在Microsoft Excel中获取机器epsilon

这似乎是一个更好的针对那些有一定程序devise经验的人的问题,而不仅仅是一般的Excel用户,因此我在这里问的是超级用户。

有什么办法,最好通过一个函数来返回ε(即Excel计算中可表示的最小的非零数)? 如果它不能通过函数获取,有没有一个快速的方法来计算它通过一个紧凑的function?

要清楚,我不是在寻找一个基于VBA的解决scheme,我想要一个不需要运行macros的基于Excel公式/电子表格的解决scheme。

我的网上search大部分都是关于如何显示符号Epsilon的讨论。

谢谢。

Excel始终运行在IEEE双打上。

一个非VBAexpression式将使您获得大于0的最小非非规范化浮点数

=2^-1022 

另一方面,机器epsilon是可以添加到1的最小数字,并且导致大于1的数字。对于双精度,它由

 =2^-52 

Microsoft为XL定义了其浮点数精度限制。 最小的浮点数在Microsoft支持文章ID:78113中列为2.2250738585072E-308。 当我在电子表格中input这个数字的时候,它实际上存储了一个浮点数0,但是如果我存储了2.2250738585073E-308(我把最小有效数字加1),我可以看到所有的数字。 我看到你要求一个机器epsilon,但是因为你使用的是XL,所以你真正看到的是C / C ++浮点库epsilon。 请参阅Microsoft Developer Network xlfRegister(表单1)主题 。

你可以编写一个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