【问题标题】:Get Machine epsilon in Microsoft Excel在 Microsoft Excel 中获取机器 epsilon
【发布时间】:2012-03-11 21:55:59
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: excel epsilon


    【解决方案1】:

    Excel 总是在 IEEE 双打上运行。

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

    =2^-1022
    

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

    给出
    =2^-52
    

    【讨论】:

    • 对,如果您多次需要它,请将其放入定义的名称中。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 感谢您的回复。但是,我希望有一个非基于 VBA 的解决方案,即使用 Excel 函数或电子表格功能返回 Epsilon 的解决方案。我宁愿不必运行任何宏。抱歉,我不清楚这一点。我已经更新了我的问题以澄清这一点。谢谢。
      猜你喜欢
      • 2011-02-06
      • 2014-04-06
      • 2016-04-09
      • 1970-01-01
      • 2013-10-09
      • 2015-02-15
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      相关资源
      最近更新 更多