excel - 在 Excel 中计算电力塔的困难

标签 excel excel-formula

我似乎在让 Excel 正确计算电力塔时遇到一些麻烦。

如果我在单元格中输入 =0.001^0.002^0.003,Excel 会将答案输出为 0.99995855,而不是正确答案 0.00113609 .

据我所知,Excel 将 a^b^c 解释为 (a^b)^c,而不是 a^ 的正确解释(b^c).

是否有办法解决此问题,以便 Excel 能够正确处理此类情况?

最佳答案

这个blog post通过 Lewis Van Winkle (也参见here)给出了不同应用程序/语言如何处理左右关联性问题的有用分割;其中,对电力塔进行右关联处理是正确的方法。他的 table 是:

<表类=“s-表”> <标题> 什么 已测试代码 结果 关联性 <正文> 重击 2**2**3 256 右关联 C++ a^b^c 64 左关联 DuckDuckGo 2^2^3 256 右关联 Excel 2^2^3 64 左关联 以太计算 2^2^3 64 左关联 Fortran 2**2**3 256 右关联 谷歌 2^2^3 256 右关联 Google 表格 2^2^3 256 右关联 手持计算器 因人而异 Lua 2^2^3 256 右关联 Matlab 2^2^3 64 左关联 Octave 2^2^3 64 左关联 Perl 2**2**3 256 右关联 PostgreSQL 2^2^3 64 左关联 Python 2**2**3 256 右关联 ruby 2**2**3 256 右关联 TCL 2**2**3 256 右关联 WolframAlpha 2^2^3 256 右关联

我们可以添加 在右联想阵营。

显然,右关联是此示例的主要方法,它排除了没有类似幂运算符的其他应用程序和语言(C#、SQL Server、Powershell 等)。我大胆猜测,由于向后兼容性问题,这个问题在 Excel(和其他)中并未“修复”。

这可能与这个问题无关(而且这超出了我的理解范围),但是 Math Exchange 上有一个人说左结合是 ordinal tetration 的方法。 (见评论)。

无论如何,我的答案是在 VBA 中使用用户定义的函数,例如从一个范围:

Function POWTOWR(rng As Range) As Double
    On Error GoTo ErrHandler
    
    Dim var As Variant
    Dim dbl As Double
    Dim lng As Long
       
    var = Application.Transpose(Application.Transpose(rng.Value))
    dbl = 1
    For lng = UBound(var) To LBound(var) Step -1
        dbl = var(lng) ^ dbl
    Next lng
        
    POWTOWR = dbl
    
    Exit Function
    
ErrHandler:
    POWTOWR = CVErr(xlErrNum)
End Function

从数组中:

Function POWTOWA(ParamArray vals() As Variant) As Double
    On Error GoTo ErrHandler
    
    Dim dbl As Double
    Dim lng As Long
    
    Debug.Print TypeName(vals)
    
    dbl = 1
    For lng = UBound(vals) To LBound(vals) Step -1
        dbl = vals(lng) ^ dbl
    Next lng
        
    POWTOWA = dbl
    
    Exit Function
    
ErrHandler:
    POWTOWA = CVErr(xlErrNum)
End Function

哪里POWTOWR = CVErr(xlErrNum)处理结果大于 Double 类型的最大值,根据 this1.79769313486231570x(10^308) (我的括号:))

结果:

enter image description here

关于excel - 在 Excel 中计算电力塔的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68208137/

相关文章:

Excel 更改日期格式

excel - 多个对象的类似语法

excel - 查找行中特定值的最后一次出现

Excel 在不同时间之间返回同一范围内的不同值

vba - 无法使用 Excel 宏循环遍历 Excel 工作表?

Excel JS自定义函数不返回矩阵

Excel 在字符串 VLOOKUP 中失败

Excel:带百分比的 SUMPRODUCT

vba - 尝试 MsgBox 单元格引用地址时出现运行时错误 '424'

excel - 根据单元格值动态更新 SUM 范围