Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Microsoft Excel中获取机器epsilon_Excel_Epsilon - Fatal编程技术网

在Microsoft Excel中获取机器epsilon

在Microsoft Excel中获取机器epsilon,excel,epsilon,Excel,Epsilon,这似乎是一个更适合于那些有编程经验的人的问题,而不仅仅是一般的Excel用户,因此我在这里提问,而不是超级用户 是否有任何方法(最好是通过函数)返回ε(即Excel计算中可表示的最小非零数)?如果不能通过一个函数来检索,有没有一种快速的方法可以通过一个紧凑的函数来计算它 明确地说,我不是在寻找基于VBA的解决方案,我想要一个不需要运行宏的基于Excel公式/电子表格的解决方案 我在网上的搜索大多是关于如何显示符号ε的讨论 谢谢 您可以编写如下VBA子例程: Public Sub Compute

这似乎是一个更适合于那些有编程经验的人的问题,而不仅仅是一般的Excel用户,因此我在这里提问,而不是超级用户

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

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

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


谢谢

您可以编写如下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的解决方案。我宁愿不必运行任何宏。对不起,我不清楚这件事。我更新了我的问题,以澄清这一点。谢谢。好的,如果你不止一次需要它,请用一个定义好的名字。