这似乎是一个更好地针对具有一定编程经验的人而不是普通 Excel 用户的问题,因此我在这里询问而不是超级用户。
有没有办法,最好是通过一个函数,来返回 epsilon(即 Excel 计算中可表示的最小非零数)?如果它不能通过函数检索,是否有一种通过紧凑函数快速计算它的方法?
需要明确的是,我不是在寻找基于 VBA 的解决方案,我想要一个不需要运行宏的基于 Excel 公式/电子表格的解决方案。
我在网上的搜索大多是关于如何显示符号 Epsilon 的讨论。
谢谢。
Excel 总是在 IEEE 双打上运行。
将为您提供大于 0 的最小非规范化浮点数的非 VBA 表达式是
=2^-1022
另一方面,机器 epsilon 是可以加到 1 并产生大于 1 的数字的最小数字。对于双精度,它由下式给出
=2^-52
Microsoft 定义了 XL 的浮点数精度限制。Microsoft 支持文章 ID:78113中将最小浮点数列为 2.2250738585072E-308 。当我在电子表格中输入这个数字时,它实际上存储了一个浮点 0,但是如果我存储 2.2250738585073E-308,(我在最低有效位上加了 1)我可以看到所有数字。我看到您要求机器 epsilon,但由于您使用的是 XL,因此您真正看到的是 C/C++ 浮点库 epsilon。请参阅Microsoft Developer Network xlfRegister (Form 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