对于 Excel 中的 x=3,为什么 = - x^2 + x 的结果为 12 而不是 -6?

对于 Excel 中的 x=3,为什么 = - x^2 + x 的结果为 12 而不是 -6?

假设我的手机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 提出一个简短的答案,我在一开始就写了。

您可能感兴趣根据 Excel,4^3^2 = (4^3)^2。这真的是指数运算顺序的标准数学惯例吗?

答案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 年之前做出的公式解析行为决策上。

相关内容