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

Rod*_*edo 95 worksheet-function notation microsoft-excel

假设Excel 电子表格中的单元格A1包含数字3。如果我输入公式

= - A1^2 + A1
Run Code Online (Sandbox Code Playgroud)

在 A2 中,然后 A2 显示数字 12,此时它应该显示 -6(或 -9+3)

这是为什么?我怎样才能防止这种误导行为?

Rod*_*edo 136

简答

要解决这个问题,只需在等号前加一个 0

= 0 - A1^2 + A1
Run Code Online (Sandbox Code Playgroud)

或添加几个括号以强制执行标准操作顺序

= - (A1^2) + A1
Run Code Online (Sandbox Code Playgroud)

或将减号替换为乘以 -1 的常见解释

= -1 * A1^2 + A1
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,您有额外的术语 +A1,最好的解决方案是@lioness99a 提出的解决方案:

= A1 - A1^2
Run Code Online (Sandbox Code Playgroud)

详细说明

根据 Excel 的约定,

= - 3^2
Run Code Online (Sandbox Code Playgroud)

等于 (-3)^2 = 9,而

= 0-3^2
Run Code Online (Sandbox Code Playgroud)

等于 0-9 = -9。

为什么只添加 0 会改变结果?

前面没有被减数,-3^2 中的减号被认为是一个否定运算符,它是一个一元运算符(只有一个参数),它改变后面的数字(或表达式)的符号。但是,0-3^2 中的减号是减法运算符,它是一个二元运算符,用于-从 之前的内容中减去后面的内容-。根据Excel的公约,幂运算符 ^的计算否定运算后减法运算符之前。请参阅“Excel 中的计算运算符和优先级”,“Excel 在公式中执行运算的顺序部分。

标准的数学约定是求幂反和减法之前计算或者更简单地说,^在 之前计算-。可耻的是,Excel 选择了与代数规则、学校教科书、学术写作、科学计算器、Lotus 1-2-3、Mathematica、Maple、面向计算的语言(如 Fortran 或 Matlab)、MS Works 和... VBA(用于编写 Excel 宏的语言). 不幸的是,LibreOffice 和 Google Sheets 中的 Calc 遵循相同的约定以与 Excel 兼容。但是,在 Google 的搜索框或搜索栏中放置表达式会产生极好的结果。如果按 Enter 键,将使用括号给出计算顺序。数学家扼杀了“计算机科学家”的论点,捍卫否定优先于取幂的讨论:http : //mathforum.org/library/drmath/view/69058.html

一般解决方法

如果你想计算

- Anything ^ 2,
Run Code Online (Sandbox Code Playgroud)

在等号前加0

0 - Anything ^ 2
Run Code Online (Sandbox Code Playgroud)

或添加几个括号以强制执行标准操作顺序

- ( Anything ^ 2 )
Run Code Online (Sandbox Code Playgroud)

或将减号替换为乘以 -1 的常见解释

-1 * Anything ^ 2
Run Code Online (Sandbox Code Playgroud)

在上述替代方案中,我更喜欢在 de 减号前添加 0,因为它是最实用的。

如果添加一个额外的项(或在没有偶次幂问题的情况下减去),

- Anything ^ 2 + ExtraTerm,
Run Code Online (Sandbox Code Playgroud)

最好的解决方案是先放置 ExtraTerm,

ExtraTerm - Anything ^ 2.
Run Code Online (Sandbox Code Playgroud)

对另一个答案的评论说,您必须注意非标准优先规则的唯一情况是减号跟在等号 ( =-) 之后。但是,还有其他示例,例如=exp(-x^2)or =(-2^2=2^2),其中减号前没有被减数。在了解意外约定之前,我曾经在 Excel 中写了一个高斯密度为

= EXP(-( (x-mu)/sigma )^2 / 2 ) / sigma / SQRT( 2*PI() ),
Run Code Online (Sandbox Code Playgroud)

这导致了荒谬的结果。我通过在第一个-符号前添加 0 解决了这个问题。

感谢@BruceWayne 提出了我在开头写的简短答案。

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


Bru*_*yne 21

比 Rodolfo 的答案更简洁,您可以使用:

=-(A1^2)+(A1)
Run Code Online (Sandbox Code Playgroud)

(编辑:我完全没有看到这是一个自我问题/答案。)

  • @宙斯:没人吗?我可能会,特别是如果它是一个更复杂的表达式,或者一个 if 条件。当然,即使省略括号,我也会写 3 *4 + 2。 (5认同)
  • 长期以来,我一直怀疑这种过度使用括号的习惯来自(哦如此普遍)过度暴露于 C(及其语法后代)。但是 C 绝不是正确遵循数学规则的一个很好的例子,包括优先级(加上它有宏问题)。相比之下,最初接触更多学术系统/语言的人强烈期望_正确的_设计,并且不会倾向于“以防万一”做出提前让步。因此真正的惊喜就像在 OP 中一样。 (3认同)
  • @jamesqf,但这必须有一定的意义和限制。没有人写 2+(3*4)。如果一种语言有算术运算和任何优先规则,它_绝对必须_支持所有标准数学约定。在 Excel 中没有任何借口会犯这种错误。 (2认同)

小智 14

领先-被认为是第一学期的一部分。

=-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