![对于 Excel 中的 x=3,为什么 = - x^2 + x 的结果为 12 而不是 -6?](https://linux22.com/image/1577262/%E5%AF%B9%E4%BA%8E%20Excel%20%E4%B8%AD%E7%9A%84%20x%3D3%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%20%3D%20-%20x%5E2%20%2B%20x%20%E7%9A%84%E7%BB%93%E6%9E%9C%E4%B8%BA%2012%20%E8%80%8C%E4%B8%8D%E6%98%AF%20-6%EF%BC%9F.png)
假设我的手机A1在 Excel 电子表格中保存的数字3.如果我输入公式
= - A1^2 + A1
在 A2 中,A2 显示数字 12,而它应该显示 -6(或 -9+3)
这是为什么?我该如何防止这种误导行为?
答案1
简短回答
为了解决这个问题,只需在等号前添加一个 0
= 0 - A1^2 + A1
或者添加几个括号来强制执行标准运算顺序
= - (A1^2) + A1
或者用乘以 -1 的常见解释替换减号
= -1 * A1^2 + A1
在这种特殊情况下,如果您有额外的项 +A1,那么最好的解决方案是@lioness99a 提出的解决方案:
= A1 - A1^2
详细说明
根据 Excel 的惯例,
= - 3^2
等于 (-3)^2 = 9,而
= 0-3^2
等于 0-9 = -9。
为什么仅添加 0 就会改变结果?
如果前面没有减数,-3^2 中的减号将被视为否定运算符,这是一个一元运算符(只有一个参数),用于更改后面的数字(或括号表达式)的符号。但是,0-3^2 中的减号是减法运算符-
,这是一个二元运算符(带有两个参数),用于从 之前的内容中减去 之后的内容-
。根据 Excel 的约定,幂运算符 ^
计算得出在否定运算符之后和减法运算符之前。 看“Excel 中的计算运算符和优先级”, “Excel 在公式中执行运算的顺序”一节。
标准数学惯例是幂运算计算得出在否定和减法之前或者更简单地说,^
在之前计算-
。可耻的是,Excel 选择了不同于代数规则、学校教科书、学术写作、科学计算器、Lotus 1-2-3、Python、数学导向语言(Mathematica、Maple、Fortran、Matlab、Julia)的惯例,多发性硬化症工作,并且……VBA(用于编写 Excel 宏的语言)。不幸的是,LibreOffice 中的 Calc 和 Google Sheets 遵循与 Excel 相同的惯例。但是,在 Google 的搜索框或栏中放置表达式会得到很好的结果。以下是数学家驳斥“计算机科学家”为否定优先于指数辩护的论点的讨论:关联
常规解决方法
如果你想计算
- Anything ^ 2,
在等号前添加一个 0
0 - Anything ^ 2
或者添加几个括号来强制执行标准运算顺序
- ( Anything ^ 2 )
或者用乘以 -1 的常见解释替换减号
-1 * Anything ^ 2
在上述所有替代方案中,我更喜欢在减号前添加 0,因为它最实用。
如果添加一个额外项(或在没有偶数幂问题的情况下减去),
- Anything ^ 2 + ExtraTerm,
最好的解决方案是将 ExtraTerm 放在第一位,
ExtraTerm - Anything ^ 2.
另一个答案的评论说,唯一需要注意非标准优先规则的情况是减号跟在等号 ( =-
) 后面的情况。但是,还有其他例子,比如=exp(-x^2)
或=(-2^2=2^2)
,减号前面没有被减数。在了解这个意想不到的惯例之前,我曾经在 Excel 中将高斯密度写成
= EXP(-( (x-mu)/sigma )^2 / 2 ) / sigma / SQRT( 2*PI() ),
这导致了荒谬的结果。我通过在第一个-
符号前添加一个 0 解决了这个问题。
感谢@BruceWayne 提出一个简短的答案,我在一开始就写了。
答案2
比 Rodolfo 的答案更简洁一点,你可以使用:
=-(A1^2)+(A1)
(编辑:我完全没看出这是一个自我问答。)
答案3
以下是Excel的行为,无论其方便性或合理性:
领先-
被认为是第一个术语的一部分。
=-3^2
处理为(-3)^2 = 9
如果开头是零,则将其视为正常减法。
=0-3^2
处理为0 - 3^2 = -9
如果你有两个操作员,那么同样的事情就会发生。
=0--3^2
被处理为0 - (-3)^2 = -9
并被
=0+-3^2
处理为0 + (-3)^2 = 9
答案4
其他人已经回答了“我该如何避免这种情况?”这个问题的一部分。我将告诉你为什么会发生这种情况。
发生这种情况的原因是 1979 年的个人计算机的内存和处理能力非常有限。
维西计算于 1979 年为 Apple II 推出,比IBM 个人计算机(大多数现代台式机和笔记本电脑的直接祖先都是 Apple II)。Apple II 最多可以配备 64 KiB(65,536 字节)的 RAM,而 VisiCalc 至少需要 32 KiB 才能运行。顺便说一句,VisiCalc 被广泛认为是 Apple II 的“杀手级应用程序”,也许确实是个人微型计算机的“杀手级应用程序”。
需要的特殊情况和公式预判越少,解析电子表格公式的代码就越简单(因此也越小)。因此,要求用户在极端情况下更加明确地表达自己的观点是合理的,以换取处理更大电子表格的能力。请记住,即使使用高端 Apple II,在考虑了应用程序所需的内存后,您也只有几十千字节可用。对于低内存系统(对于“严肃”的机器来说,48 KiB RAM 并不是一种罕见的配置),限制甚至更低。
当 IBM 推出 PC 时,VisiCalc 被移植到了新架构中。维基百科将此移植称为“错误兼容”,因此您非常希望看到完全相同的公式解析行为,即使系统在技术上能够进行更复杂的解析。
从 1982 年开始,微软开始与 VisiCalc 竞争,后来又与 1-2-3 竞争,多计划跨平台电子表格。后来,莲花 1-2-3于 1983 年专为 IBM PC 推出,并迅速超越了 VisiCalc。为了使过渡更容易,两者都以与 VisiCalc 相同的方式解析公式是合理的。因此有限的前瞻行为将会延续下去。
1985 年,微软引入了 Excel,最初用于 Macintosh,最初1987 年第 2 版到 PC。同样,为了使过渡更容易,延续人们近十年来已经习惯的公式解析行为是有意义的。
Excel 每次升级都有机会改变其行为,但这不仅要求用户学习一种新的公式输入方式,还可能破坏与使用前一版本创建的电子表格的兼容性。在竞争仍然非常激烈的市场中,有多家商业公司在各个领域相互竞争,因此很可能决定保留用户习惯的行为。
快进到 2019 年,我们仍然停留在 1978-1979 年之前做出的公式解析行为决策上。