7

这似乎是一个更好地针对具有一定编程经验的人而不是普通 Excel 用户的问题,因此我在这里询问而不是超级用户。

有没有办法,最好是通过一个函数,来返回 epsilon(即 Excel 计算中可表示的最小非零数)?如果它不能通过函数检索,是否有一种通过紧凑函数快速计算它的方法?

需要明确的是,我不是在寻找基于 VBA 的解决方案,我想要一个不需要运行宏的基于 Excel 公式/电子表格的解决方案。

我在网上的搜索大多是关于如何显示符号 Epsilon 的讨论。

谢谢。

4

3 回答 3

8

Excel 总是在 IEEE 双打上运行。

将为您提供大于 0 的最小非规范化浮点数的非 VBA 表达式是

=2^-1022

另一方面,机器 epsilon 是可以加到 1 并产生大于 1 的数字的最小数字。对于双精度,它由下式给出

=2^-52
于 2012-02-21T18:03:50.310 回答
4

Microsoft 定义了 XL 的浮点数精度限制。Microsoft 支持文章 ID:78113中将最小浮点数列为 2.2250738585072E-308 。当我在电子表格中输入这个数字时,它实际上存储了一个浮点 0,但是如果我存储 2.2250738585073E-308,(我在最低有效位上加了 1)我可以看到所有数字。我看到您要求机器 epsilon,但由于您使用的是 XL,因此您真正看到的是 C/C++ 浮点库 epsilon。请参阅Microsoft Developer Network xlfRegister (Form 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 回答