为什么Excel中x = 3的= -x ^ 2 + x会导致12而不是-6?


96

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

= - A1^2 + A1

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

这是为什么?如何防止这种误导性行为?


19
负数的平方是正数。这将使公式变为9 + 3。-(A1)^ 2将给您-6。
Ramhound

68
在任何理智的环境中,@ Ramhound Power的优先级都高于减号。
没人

17
它应该是-(A1 ^ 2)以获得-6 ...您需要在操作前后加上括号,而不仅仅是数字。Excel在数学上是很好的选择,但是您需要遵守操作顺序,如有疑问,请使用括号!
SnakeDoc

13
这全部与操作顺序有关,与Excel无关。
YetAnotherRandomUser18年

11
对于所有批评OPs数学技能的评论者:在标准纯数学中,这应该明确表示为-6。特别是,负数应始终表示为0-x(如答案中所示)。一元的引入-是应用计算机科学中的一个新主题,几乎总是一个实现细节。批评OP不理解这一点就好比用“程序很好,回答有关浮点错误的困惑的问题。您只需要检查数学。看看,如果您用二进制形式写这些数字,那么……”
DreamConspiracy

Answers:


136

简短答案

要解决此问题,只需在等号前添加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中选择了不同的约定从这些代数规则,教科书,学术写作,科学计算器,莲花1-2-3,数学,枫树,计算面向如Fortran或Matlab,语言MS Works和... VBA(中用于编写Excel宏的语言)。不幸的是,LibreOffice和Google Sheets的Calc遵循与Excel兼容的相同约定。但是,将表达式放在Google的搜索框或栏中会产生出色的效果。如果按回车键,将使用括号给出计算顺序。关于数学家杀死捍卫否定优先于幂运算的“计算机科学家”论据的讨论:http ://mathforum.org/library/drmath/view/69058.html

一般解决方法

如果要计算

- 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),其中在减号之前没有减数。

感谢@BruceWayne提出了一个简短的答案,该答案是我在一开始就写的。

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


1
评论不作进一步讨论;此对话已转移至聊天
DavidPostill

请参阅上面。如果所有评论不属于聊天讨论,则将删除所有评论。
DavidPostill

20

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

=-(A1^2)+(A1)

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


1
究竟!取决于任何语言或应用程序的优先规则,您认为它们应该成为麻烦的良方。
jamesqf

2
@jamesqf,但是对此必须有一定的理解和限制。没有人写2+(3 * 4)。如果一种语言具有算术运算和任何优先规则,那么它绝对必须支持所有标准数学惯例。在Excel中,这种错误是没有任何借口的。
宙斯

4
@宙斯:没人吗?我可能会,尤其是如果它使用更复杂的表达式或if条件。当然,即使我遗漏了括号,我也会写3 * 4 + 2。
jamesqf

3
我长期以来一直怀疑,这种过度使用parens的习惯是由于(过度流行)对C(及其语法后代)的过度暴露所致。但是C绝不是正确遵循数学规则(包括优先级)的一个很好的例子(加上它对宏有问题)。相比之下,最初接触更多学术系统/语言的人们强烈期望正确的设计,不会倾向于“以防万一”。因此,真正的惊喜就像在OP中一样。
宙斯'18

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


4

因为Excel将您的方程式解释为:

(-x)^ 2 + x

当您需要时:

-(x ^ 2)+ x

为了避免这种不良行为,我发现最佳实践是大量使用括号来定义您自己的优先级系统,因为否定与减法不同,因此不属于PEMDAS。一个例子是:

(-(x ^ 2))+ x

可能矫kill过正,但这是我保证Excel表现出所需方式的方式。


4
“因为在Excel中不能保证PEMDAS” —不,在Excel中绝对可以保证。别的就是疯狂。一元否定(与减法不同!)是否具有优先于幂运算,PEMDAS并不涵盖。
康拉德·鲁道夫

1
@routhken大量使用括号会使编写,编辑和调试麻烦。为了简化这些任务,我在使用的软件中检查运算符的优先级,并且仅使用必要的括号。另外,我添加了空格以提高可读性。
Rodolfo Oviedo

@KonradRudolph我编辑了我的答案,谢谢您的澄清。
routhken '18

1
我更喜欢使用x - x^2。这样可以确保将-解释为二进制减法运算符。
Xalorous

@KonradRudolph我认为看待这种情况的方法是电子表格和计算机编程语言使用PUEMDAS,其中一元运算在括号运算符之后但在二进制数学运算符之前进行评估。
Xalorous

3

该表达式= - A1^2 + A1特定于Excel,因此必须遵循Excels规则。与这里的其他答案相反,没有正确的优先顺序。不同的应用仅采用不同的约定。供您参考,excel使用的优先顺序为:

:       Range
<space> intersection
,       union
-       Negation
%       Percentage
^       Exponential
* and / Multiplication and Division
+ and - Addition and Subtraction
&       Concatenation
= < > <= >= <>  Comparison

您可以使用括号覆盖。


9
当然,Excel可以选择+表示乘法,*表示减法等。任何需要使用Excel的人都必须知道它。但这是错误的。正确的案例不是同一级别的错误(或愚蠢),但是您可以肯定地认为Excel定义的优先级错误。
Mormegil '18

4
@Mormegil好说!一旦您尝试= 1 + 2 * 2并看到答案是5而不是6,就会导致您假定Excel遵循代数规则。误导人们有什么意义?
Rodolfo Oviedo

优先顺序正确,但是计算机还有其他操作。这里的问题是,计算机使用“-”进行求反和减法,在做代数的人看到区分和减法之间。为了使计算机能够分辨出差异,它需要一套规则。在“ -x”中,“-”是一元运算符(作用于一个操作数)。在“ 1-x”中,“-”是二进制运算符。因此,Excel(和其他计算机软件)将-x ^ 2转换为(-x)^ 2。其余的优先顺序仍然适用,因为我们都在小学学习。
Xalorous

3
@Xalorous:是的,-可以是一元或二进制。但这并不意味着操作顺序。其他语言也能做到这一点:在Python,Ruby,Octave,Awk和Haskell(想到的前五种具有幂运算符的前五种语言)中,-3 ** 2总会得出-9。为什么?因为那是正确的答案。
wchargin

1
@xorous做书面代数的人使用观众的习俗和括号来减少歧义。没有正确的优先顺序,并且代数规则实际上只是约定。
保罗·史密斯

3

您可以使用以下两种方法之一:

=-A1^2+A1

将返回12,但是:

=0-A1^2+A1

将返回-6

如果您认为返回12违反了常识;请注意,Google表格的功能相同。


1
一元减号的优先级似乎很高。
安德烈亚斯·瑞布兰德

@AndreasRejbrand只有当它直接跟随=符号时,它似乎才是一元的……............... =A1-A1^2也返回-6
Gary的学生

2
但是在示例A1-A1 ^ 2中,负号显然是二进制的。(一元运算符是采用单个操作数的运算符(如-5中的一元减号,或阶乘运算符,非符号等);二元运算符是采用两个操作数的运算符(如二进制加号,减号,乘法,请注意,减号也可以是一元的,即使它不是紧跟在等号之后:5 +(-4 + 3)。
安德烈亚斯·瑞布兰德

@AndreasRejbrand我完全同意你的看法!
加里的学生

为了捍卫Google的声誉,请尝试在搜索框或栏中输入数学表达式。您将获得与优质数学一致的非常出色的结果,甚至可以从Matlab或Octave获得更好的结果,例如,尝试2 ^ 1 ^ 2。
Rodolfo Oviedo

3

或者,你可以做

= A1 - A1^2

因为 -y + x = x-y


这并不能解释为什么它应该起作用,并且可以重复许多先前的答案。
fixer1234 '18

@ fixer1234从字面上看,没有人这么说过,而我给出了数学上的原因吗?
lioness99a

1.许多答案描述将其转换为显式减法。2.这不是数学上的原因。问题是,为什么Excel不会那样做。答案是,Excel不会将负数视为减法。
fixer1234 '18

他们问如何防止这种行为。我给他们看了最简单的方法。并没有一个单一的答案说明我有什么...
lioness99a

最好的解决方案。我以应有的信誉补充了我的答案。如果您喜欢该问题,请对其进行投票。
Rodolfo Oviedo

2

其他人已经回答“如何避免这种情况?” 问题的一部分。我要告诉你为什么会发生。

发生这种情况是因为1979年的个人计算机具有非常有限的内存和处理能力。

VisiCalc于1979年为Apple II推出,距IBM PC首次发布(大多数现代台式机和笔记本电脑追溯其直接血统)的两年之前。Apple II可能具有多达64 KiB(65,536字节)的RAM,而VisiCalc至少需要32 KiB才能运行。顺便说一句,VisiCalc被广泛认为是Apple II的“杀手级应用”,也许对于一般的个人微型计算机也是如此。

所需的特殊情况越少,公式的前瞻性越少,可以简化用于解析电子表格公式的代码。因此,有必要要求用户在极端情况下更为明确,以换取能够处理更大的电子表格的机会。请记住,即使使用了高端的Apple II,在考虑了应用程序所需的内存之后,您只有几十KB的数据可以玩。对于低内存系统(对于“严肃”的计算机而言,48 KiB RAM并非常见配置),该限制甚至更低。

当IBM推出其PC时,就将VisiCalc移植到了新架构上。Wikipedia将此端口称为“错误兼容”的端口,因此,即使系统从技术上讲能够进行更复杂的解析,您也非常希望看到完全相同的公式解析行为。

从1982年开始,Microsoft凭借其Multiplan跨平台电子表格与VisiCalc和后来的1-2-3竞争。后来,Lotus 1-2-3于1983年专门为IBM PC推出,并很快超过了它的VisiCalc。为了简化转换过程,两者都以与VisiCalc相同的方式解析公式是有意义的。因此,有限的超前行为将继续进行。

1985年,Microsoft 将Excel引入了PC ,最初是用于Macintosh,从1987年的版本2开始。再次,为了使过渡更容易,有理由继续使用公式解析行为,此行为是人们将近十年以来已经习惯的行为。

每次升级Excel时,都存在改变行为的机会,但不仅要求用户学习一种新的键入公式的方法,而且还冒着破坏与以前版本使用或创建的电子表格的兼容性的风险。在竞争仍然非常激烈的市场中,几家商业公司在每个领域相互竞争,很可能会做出决定,以保持用户习惯的行为。

快进到2019年,我们仍然坚持最初不迟于1978-1979年做出的解析行为决定的公式。



0

该表达式- A1^2包含两个运算符,即一元-求反运算符和二进制幂运算符^。在没有任何括号的情况下,可能有两种解释。要么:

-(A1^2)

要么:

(-A1)^2

第一个说首先对操作数A1和进行幂运算2,然后对它求反。

第二个表示首先对操作数取负A1,然后对和的结果取幂2

正如对问题的评论中所说,在任何理智的环境中大国都比负号具有更高的优先权。这意味着,最好是系统采用第一个系统。

但是,Excel更喜欢第二种。

课程是,如果不确定您的环境是否正常,请将括号括起来是安全的。所以写-(A1^2)


这将复制接受的答案和其他较早的答案。
fixer1234 '18

-1

这不是excel的问题,而是指数和负数。当您取一个数字并将其提高到偶数幂时,可以取消负号。

-x^2 + x == (-x * -x) + x 
x = 3  => (-3 * -3) + 3
       ==  9 + 3 => 12

您需要使用括号,并使用多个 -1

-1 * (x^2) + x

10
这不是标志的工作方式。它应该是:x = 3 =>-(3 * 3)+ 3 =6。Excel只是不使用标准代数约定。
henning

3
@henning如另一条评论中所述,虽然这不是“标准”约定,但它是一个约定,尽管不是最常见约定。因此说“这不是标志的作用”是完全错误的。相反,这不是标牌在常用用法中起作用的方式。
康拉德·鲁道夫

2
@KonradRudolph足够公平。我承认,我只知道当前的用法,我认为这是导致OP混淆的原因。
henning

6
不,这绝对 Excel的问题。Excel为运算符优先级使用错误的规则。
达伍德·本·卡里姆

请注意-x^2x是3和x^2x是-3 之间的区别。-x^2+x永远不会达到12:wolframalpha.com/input/?i = -x%5E2%2Bx
Thomas Weller

-2

-x ^ 2 + x其中x = 3这是二次方程式的示例该方程式可以这样写:-3 * -3 + 3:乘法优先于加法,因此结果将写为:9 + 3 :Why = 9,因为负数x负数给出正数。可以使用任何计算器,计算尺或任何计算机数学程序来验证这一点。最终结果9 + 3 = 12


-3

这只是一个非常简单的数学。

规则1.即使是负数的乘法,也将输出正结果:

减*减=加

减*减*减=减

减*减*减*减=加

这是由于以下事实:负号成对地相互抵消。

规则2。每个数字的幂表示该数字将被自身乘以多次。

(2)^ n,其中n = 2 => 2 * 2 = 4

(-2)^ n,其中n = 2 =>(-2)*(-2)= 4

如果您可以看到规则编号1。

(-3)^ n,其中n = 3 =>(-3)*(-3)*(-3)= 9 *(-3)= -27

规则3.乘法和除法的优先级高于加法和减法。

3 * 5 + 2 = 15 + 2 = 17

3 *(5 + 2)= 3 * 7 = 21

您的问题的答案是:

合并之前的所有3条规则:

-x ^ 2 + x,其中x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12

我对您的建议是每年花费一些时间,并不断刷新数学的基本规则。

实际上,仅通过了解基本数学知识,您就可以保持并保持在世界大部分地区的技能。


9
当您编写“合并之前的所有3条规则:-x ^ 2 + x,其中x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12”时,您假设-x ^ 2 =(-x) ^ 2。您之前没有说过这个假设。因此,您的结论是毫无根据的。实际上,如果您阅读数学教科书或Wikipedia,您会注意到未遵循您的隐含假设。数学教科书,科学论文等均遵循以下假设:-x ^ 2 =-(x ^ 2)
Rodolfo Oviedo

规则3适用于类似的二元运算符+-*/,但不适用于-或的一元运算符+。幂运算符的优先级高于*/但一元运算符的优先级更高
phuclv 18'Dec

回复@RodolfoOviedo,您不正确。-(x)^ 2和-x ^ 2之间存在巨大差异。而且很清楚。我没有说明这一点。先生,请不要无礼,但是我觉得您只是想以一种被动的积极态度来卷土重来。很抱歉,如果我说了些侮辱您的话。我只是在这里帮忙。
迈克尔·约翰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.