在 Excel 中计算电力塔的困难

2024-02-27

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

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

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

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


This 博客文章 https://codeplea.com/exponentiation-associativity-options by 刘易斯·范·温克尔 https://github.com/codeplea(参考here https://en.wikipedia.org/wiki/Order_of_operations#Serial_exponentiation以及)给出了不同应用程序/语言如何处理左关联性与右关联性问题的有用细分;其中,对电力塔进行右关联处理是正确的方法。他的表是:

What Code Tested Result Associativity
Bash 2**2**3 256 right-associative
C++ a^b^c 64 left-associative
DuckDuckGo 2^2^3 256 right-associative
Excel 2^2^3 64 left-associative
EtherCalc 2^2^3 64 left-associative
Fortran 2**2**3 256 right-associative
Google 2^2^3 256 right-associative
Google Sheets 2^2^3 256 right-associative
Hand-held Calculators Varies
Lua 2^2^3 256 right-associative
Matlab 2^2^3 64 left-associative
Octave 2^2^3 64 left-associative
Perl 2**2**3 256 right-associative
PostgreSQL 2^2^3 64 left-associative
Python 2**2**3 256 right-associative
Ruby 2**2**3 256 right-associative
Tcl 2**2**3 256 right-associative
WolframAlpha 2^2^3 256 right-associative

我们可以添加r /questions/tagged/r在右联想阵营。

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

这可能与这个问题无关(而且这超出了我的理解范围),但是 Math Exchange 上有一个人说左结合是解决问题的方法序数四联 https://math.stackexchange.com/q/2313576/341419(见评论)。

无论如何,我的答案是在 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

Where POWTOWR = CVErr(xlErrNum)处理结果大于 Double 类型的最大值,根据this https://superuser.com/questions/1041458/what-is-largest-value-number-that-i-can-store-in-an-excel-vba-variable is 1.79769313486231570x(10^308)(我的括号:))

Results:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Excel 中计算电力塔的困难 的相关文章

  • 如何将 xlsx 读取为 pandas 数据框,并将公式作为字符串

    我有一个包含一些计算列的 Excel 文件 例如 我在 a 列中有一些数据 而 b 列是使用 a 列中的值计算的 我需要将新数据附加到 a 列并计算 b 列并保存文件 import pandas as pd df pd DataFrame
  • Excel 自动填充列 X++++..Y++..Z+

    如何自动填充之间的值 选择 A 列 CTRL G gt Blanks gt OK Type press UpArrow 然后按CTRL ENTER See 这个链接 http www techrepublic com blog msoffi
  • =MATCH() 等价于多维范围

    我有一个 Excel 工作表 其中单元格 A1 C20 INT RAND 10 这是我的数据范围 单元格 E1 1 E2 2 E3 3 等 这些是我试图找到的值 我设置单元格 F1 MATCH E1 A C 0 F2 MATCH E1 A
  • 延迟宏以允许事件完成

    在尝试从宏内访问外部 API 函数集时 我发现有必要添加延迟 以便外部 API 有时间处理选择 实现这一点会带来一些困难 因为使用 Application Wait 或 Application Sleep 不起作用 在线搜索让我尝试使用 G
  • VBA - 填充自定义功能区下拉列表/列表框

    我无法填充下拉列表 列表框 原始代码来自 https exceloffthegrid com inserting a dynamic drop down in ribbon https exceloffthegrid com inserti
  • 用户窗体上的类对象 TextBox 可用方法

    我注意到 当我为文本框创建类模块并在表单上使用它时 通过在表单 init 事件中通过 VBA 添加 Enter 或 Exit 方法都不可用 当然 如果我只是在表单中添加一个文本框 我可以让 DblClick 方法正常工作 因此我的类设置正确
  • VBA - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • 将按颜色过滤的行复制到新工作表

    我有一个 Excel 电子表格 如下所示 Job1 Job2 Job3 Job4 Job5 Job1 Job2 Job3 Job4 Job5 每行和列之间的单元格颜色不同 我需要按橙色对每列进行排序 然后将行名称复制到新工作表中 所以最后我
  • Countif 不适用于小时和/或日期

    您好 我有 3 列内的数据 A 目的地 例如洛杉矶 B 承运人 例如 Ups C 发货时间 预计 4 00 使用的时间是24小时时间 不含Am Pm 我需要进行计数才能知道在特定时间我们有多少批货物 尝试过 COUNTIF A1 A100
  • 无法在我的抓取工具中设置超时选项以防止无限循环

    我已经使用 IE 在 vba 中编写了一个脚本 在其搜索框中的网页中启动搜索 通过点击搜索按钮根据搜索填充结果 网页加载它是searchbox几秒钟后它就会打开 但是 我的下面的脚本可以处理这个障碍并以正确的方式执行搜索 现在 我有一个稍微
  • xlwings: 删除一个列 | Excel 中的行

    如何删除 Excel 中的一行 wb xw Book Shipment xlsx wb sheets Page1 1 range 1 1 clear clear 用于删除内容 我想删除该行 我很惊讶 clear 函数有效 但 delete
  • 如何在VBA编辑器中跳转到行号?

    我在 Office 2010 中使用 VBA 在顶部 有一个带有行号和列号的框 例如 Ln 1480 Col 17 有没有办法在代码编辑中 而不是在执行中 直接跳转到另一个行号 就像我使用的那样Ctrl G在记事本中 这个MSDN答案 ht
  • 如何找到特定程序的安装目录?

    我已经成功地编写了一些用于工作的 VBA 宏 这些宏基本上创建了一个数据文件 将其提供给一个程序并对该程序的输出进行后处理 我的问题是程序安装路径是硬编码在宏中的 并且安装在我同事的计算机上可能会有所不同 我首先想到的是 我可以从每个人那里
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 输入新行并复制上面单元格中的公式

    我正在尝试创建一个 Excel 宏来执行以下操作 在文档末尾输入新行 复制上面单元格中的公式 到目前为止我有这个 Sub New Delta Go to last cell Range A4 Select Selection End xlD
  • 我如何以更好的方式编码而不是像这样的VBA编码

    我正在 Excel 中创建一个仪表板 但是我想知道是否有比这更好的编码方式 我想对其进行模块化 而不是这样做以使其更加整洁 Private Sub Afford If af Value True Then af afr Value Shee
  • 在 PYTHON 中读取 EXCEL 时,“utf-16-le”编解码器无法解码字节

    我正在尝试读取不同语言 阿拉伯语 希腊语 意大利语 希伯来语等 的各种数量的 xls 文件 当我尝试调用 open workbook 函数时 出现如下所示的错误 不知道如何将格式设置为任何语言 Code book xlrd open wor
  • Excel 2003 中的 IFERROR

    我通过阅读几个线程了解到IFERROR在 Excel 2003 中由IF ISERROR 我尝试从 Excel 2007 复制的代码是 IFERROR A1 我知道必须有一个简单的解决方案将其转换为IF ISERROR 但我没有任何效果 意
  • 无法使用 VBA 代码从 Excel 连接到 Teradata - 无法通过网络访问 Teradata 服务器

    我一直在尝试使用 vba 代码从 Excel 连接到 Teradata 但收到以下错误 无法通过网络访问 Teradata Server 我已经能够从 Teradata SQL 助手成功连接 并且还成功 ping 通 Teradata 服务
  • 如何使用vba复制Excel工作表中的动态范围

    我试图使宏中的范围是动态的 而不指定最后一行x Sheets SheetName Range A2 K1000 Copy在 1000 行中 我想将其更改为动态 因为有时我的数量会更少或更多 尝试这个 Sub Test Dim lRow as

随机推荐