在Microsoft Excel中获取机器epsilon
这似乎是一个更适合于那些有编程经验的人的问题,而不仅仅是一般的Excel用户,因此我在这里提问,而不是超级用户 是否有任何方法(最好是通过函数)返回ε(即Excel计算中可表示的最小非零数)?如果不能通过一个函数来检索,有没有一种快速的方法可以通过一个紧凑的函数来计算它 明确地说,我不是在寻找基于VBA的解决方案,我想要一个不需要运行宏的基于Excel公式/电子表格的解决方案 我在网上的搜索大多是关于如何显示符号ε的讨论在Microsoft Excel中获取机器epsilon,excel,epsilon,Excel,Epsilon,这似乎是一个更适合于那些有编程经验的人的问题,而不仅仅是一般的Excel用户,因此我在这里提问,而不是超级用户 是否有任何方法(最好是通过函数)返回ε(即Excel计算中可表示的最小非零数)?如果不能通过一个函数来检索,有没有一种快速的方法可以通过一个紧凑的函数来计算它 明确地说,我不是在寻找基于VBA的解决方案,我想要一个不需要运行宏的基于Excel公式/电子表格的解决方案 我在网上的搜索大多是关于如何显示符号ε的讨论 谢谢 您可以编写如下VBA子例程: Public Sub Compute
谢谢 您可以编写如下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
但在我的机器上,它给出了222E-16,这很奇怪,因为我可以在一个单元格中写入=2^-113
,得到962965E-35
编辑:
=1*(0,5-0,4-0,1)
我得到:-2,78E-17微软为XL定义了浮点数精度限制。中列出的最小浮点数为2.2250738585072E-308。当我在电子表格中输入这个数字时,它实际上存储了一个浮点0,但是如果我存储了2.22507373858585073E-308,(我在最低有效位上加了1),我可以看到所有的数字。我看到您要求一个机器epsilon,但由于您使用的是XL,您将真正看到的是C/C++浮点库epsilon。请参阅。Excel始终在IEEE Double上运行 将获得大于0的最小非非规范化浮点数的非VBA表达式是
=2^-1022
另一方面,机器ε是可以加在1上并导致大于1的最小数。对于双精度,它由以下公式给出
=2^-52
谢谢你的回复。然而,我希望有一个非基于VBA的解决方案,即使用Excel函数或电子表格功能返回Epsilon的解决方案。我宁愿不必运行任何宏。对不起,我不清楚这件事。我更新了我的问题,以澄清这一点。谢谢。好的,如果你不止一次需要它,请用一个定义好的名字。