For x=3 in Excel, why does = - x^2 + x result in 12 instead of -6?
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Hypnotic Orient Looping
--
Chapters
00:00 For X=3 In Excel, Why Does = - X^2 + X Result In 12 Instead Of -6?
00:34 Accepted Answer Score 139
04:52 Answer 2 Score 20
05:09 Answer 3 Score 15
06:05 Answer 4 Score 4
06:50 Answer 5 Score 4
10:15 Thank you
--
Full question
https://superuser.com/questions/1385570/...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#microsoftexcel #worksheetfunction #notation
#avk47
ACCEPTED ANSWER
Score 139
Short answer
To solve this problem, just add a 0 before the equal sign
= 0 - A1^2 + A1
or add a couple of parentheses to force the standard order of operations
= - (A1^2) + A1
or replace the minus sign by its common interpretation of multiplication by -1
= -1 * A1^2 + A1
In this particular case, where you have the extra term +A1, the best solution is that proposed by @lioness99a:
= A1 - A1^2
Detailed explanation
Under Excel's conventions,
= - 3^2
equals (-3)^2 = 9, while
= 0-3^2
equals 0-9 = -9.
Why does adding just a 0 change the result?
Not preceded by a minuend, the minus sign in -3^2 is considered a negation operator, which is a unary operator (with only one argument) that changes the sign of the number (or parenthetical expression) that follows. However, the minus sign in 0-3^2 is a subtraction operator, which is a binary operator (with two arguments) that subtracts what follows -
from what precedes -
. According to Excel's conventions, the exponentiation operator ^
is computed after the negation operator and before the subtraction operator. See "Calculation operators and precedence in Excel", section "The order in which Excel performs operations in formulas".
The standard mathematical convention is that the exponentiation is computed before both negation and subtraction or, more simply stated, ^
is computed before -
. Shamefully, Excel chose different conventions from those of algebra rules, school textbooks, academic writing, scientific calculators, Lotus 1-2-3, Python, mathematically oriented languages (Mathematica, Maple, Fortran, Matlab, Julia), MS Works, and... VBA (the language used to write Excel's macros). Unfortunately, Calc from LibreOffice and Google Sheets follow the same convention for compatibility with Excel. However, placing an expression in Google's search box or bar gives excellent results. The following is a discussion where a mathematician kills the arguments of a "computer scientist" defending the precedence of negation over exponentiation: Link
General Workarounds
If you want to compute
- Anything ^ 2,
add a 0 before the equal sign
0 - Anything ^ 2
or add a couple of parentheses to force the standard order of operations
- ( Anything ^ 2 )
or replace the minus sign by its common interpretation of multiplication by -1
-1 * Anything ^ 2
Of the alternatives above, I prefer adding a 0 before de minus sign because it is the most practical.
If an extra term is added (or subtracted without the even-power problem),
- Anything ^ 2 + ExtraTerm,
the best solution is to place the ExtraTerm first,
ExtraTerm - Anything ^ 2.
A comment to another answer says that the only case you have to be aware of the non-standard precedence rule is where a minus sign follows an equal sign (=-
). However, there are other examples, like =exp(-x^2)
or =(-2^2=2^2)
, where there isn't a minuend before the minus sign. Before knowing about the unexpected convention, I once wrote a Gaussian density in Excel as
= EXP(-( (x-mu)/sigma )^2 / 2 ) / sigma / SQRT( 2*PI() ),
which led to ridiculous results. I solved the problem by adding a 0 before the first -
sign.
Thanks to @BruceWayne for proposing a short answer, which I wrote at the beginning.
You may be interested in According to Excel, 4^3^2 = (4^3)^2. Is this really the standard mathematical convention for the order of exponentiation?
ANSWER 2
Score 20
A bit more succint than Rodolfo's Answer, you can use:
=-(A1^2)+(A1)
(Edit: I totally didn't see it was a self question/answer.)
ANSWER 3
Score 15
The following is Excel's behavior, regardless of its convenience or reasonableness:
A leading -
is considered part of the first term.
=-3^2
is processed as (-3)^2 = 9
With a zero at the start it is instead treated as normal subtraction.
=0-3^2
is processed as 0 - 3^2 = -9
And if you have two operators, then the same thing will happen.
=0--3^2
is processed as 0 - (-3)^2 = -9
and
=0+-3^2
is processed as 0 + (-3)^2 = 9
ANSWER 4
Score 4
Because Excel is interpreting your equation as:
(-x)^2 + x
When you wanted:
-(x^2) + x
To prevent this sort of undesired behavior, I find the best practice is to make heavy use of parenthesis to define your own priority system, since negation is not the same as subtraction, and thus not covered by PEMDAS. An example would be like:
(-(x^2))+x
It might be overkill, but this is how I guarantee Excel behaves the way I want.
ANSWER 5
Score 4
Other people have answered the "how can I avoid this?" part of the question. I am going to tell you why it happens.
It happens because personal computers in 1979 had very limited memory and processing capability.
VisiCalc was introduced for the Apple II in 1979, two years before the initial release of the IBM PC (to which most modern desktop and laptop computers trace their direct ancestry). The Apple II could be had with up to 64 KiB (65,536 bytes) of RAM, and VisiCalc required at least 32 KiB to run. As a bit of an aside here, VisiCalc is rather widely considered to be the "killer application" for the Apple II, and perhaps indeed for personal microcomputers in general.
The fewer special cases and less formula look-ahead is required, the simpler (and by consequence smaller) the code to parse a spreadsheet formula can be made. It would therefore make sense to require the user to be somewhat more explicit in corner cases, in exchange for being able to handle larger spreadsheets. Remember, even with a high-end Apple II, you only had a few tens of kilobytes to play with after the memory required by the application was accounted for. With a low-memory system (48 KiB RAM wasn't an uncommon configuration for a "serious" machine), the limit was even lower.
When IBM introduced their PC, a port of VisiCalc to the new architecture was made. Wikipedia refers to this port as "bug compatible", so you'd very much expect to see the exact same formula parsing behavior, even if the system technically was capable of more complex parsing.
Beginning in 1982, Microsoft competed with VisiCalc, and later 1-2-3, with their Multiplan cross-platform spreadsheet. Later on, Lotus 1-2-3 was introduced in 1983 specifically for the IBM PC, and quickly overtook VisiCalc on it. To make the transition easier, it made sense for both to parse formulas in the same way that VisiCalc did. So the limited look-ahead behavior would be carried forward.
In 1985, Microsoft introduced Excel, originally for the Macintosh and beginning with version 2 in 1987 to the PC. Again, to make the transition easier, it made sense to carry forward the formula parsing behavior that people were already used to since by now almost a decade.
With each upgrade of Excel, the opportunity to change the behavior existed, but not only would it require users to learn a new way to type formulas, it would also risk breaking compatibility with spreadsheets used or created with the previous version. In a still very competitive market with several commercial companies competing with each other in each field, the decision was likely made to keep the behavior users were accustomed to.
Fast forward to 2019, and we're still stuck with the formula parsing behavior decisions originally made no later than 1978-1979.