我似乎在让 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 是:
2**2**3
a^b^c
2^2^3
2^2^3
2^2^3
2**2**3
2^2^3
2^2^3
2^2^3
2^2^3
2^2^3
2**2**3
2^2^3
2**2**3
2**2**3
2**2**3
2^2^3
我们可以添加 r在右联想阵营。
显然,右关联是此示例的主要方法,它排除了没有类似幂运算符的其他应用程序和语言(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 类型的最大值,根据 this是 1.79769313486231570x(10^308)
(我的括号:))
结果:
关于excel - 在 Excel 中计算电力塔的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68208137/