Ask HN: What is -2^2?

12 points by laujen ↗ HN
Is -2^2 equal to 4 or -4? which has precedence, the negate or the power? TI algebraic calculators do it one way while HP's algebraic calculators do it another.

13 comments

[ 2.8 ms ] story [ 38.1 ms ] thread
I remember Stoustrup saying that this question was the reason that C++ doesn't have a double-asterisk operator. Everyone seems to give a different "obvious" answer.
I've always been taught that (-2)^2 = 4, while -2^2 = -4. This has stayed true all through college calculus, but I can't prove it.
I believe the most common answer is -4, due to exponentiation having a higher precedence than negation. I'm not sure it's completely standard, though. In written mathematics it would be more common to write (-2)^2 if you really meant the -2 to be exponentiated. But, it might be different if you were using a style of traditional mathematics typesetting where unary negation and subtraction are more clearly distinguished. I could imagine something like 5 - -2^2 meaning to subtract (-2)^2 from 5, if it were written in a typesetting style where the unary minus was smaller and clearly more "bound" to the 2 than the subtraction was.

Miscellaneous support: a random elementary algebra textbook: http://infinity.cos.edu/algebra/Rueger%20Text/Chapter02/2.6_... and a dude from mathforum.org: http://mathforum.org/library/drmath/view/53240.html

That Math Forum post is excellent. Thanks!
I read it as shorthand for (-1) * 2^2, so -4.
For the record, the TI-83 is -4 and the HP48 is 4. TI-83 (or now TI-84) is the dominant calculator in US math classes.
HP48 is RPN, which sidesteps precedence issues. So, here you explicitly need to decide if you want 2 NEG 2 ^ (i.e. (-2)^2) or 2 2 ^ NEG (i.e. -(2^2)).

The traditional order of operations is what the TI series does. In essence, it assumes you want the second form.

By the way, on my HP50G in algebraic mode, typing '-2^2' does give -4.

I apologize. You are correct, the HP48gx is RPN only. Don't know why I thought otherwise. I had it in my head for some reason that 48 did both (it kind of does but not really) and that it gave the answer as 4.
Considering operator precedence http://en.wikipedia.org/wiki/Order_of_operations Quote: "Unfortunately, there exist differing conventions concerning the unary operator − (usually read "minus"). In written or printed mathematics, the expression −32 is interpreted to mean −(32) = −9, but in some applications and programming languages, notably the application Microsoft Office Excel and the programming language bc, unary operators have a higher priority than binary operators, that is, the unary minus (negation) has higher precedence than exponentiation, so in those languages −32 will be interpreted as (−3)2 = 9. [1]. In any case where there is a possibility that the notation might be misinterpreted, it is advisable to use parentheses to clarify which interpretation is intended."
Thanks for addressing the issue. A lot of people are taking this as an opinion question: it's not.
Just remember PEMDAS: Parentheses first, Exponents next, Multiply/Divide, Add/Subtract. This is the order for dealing with simple math manipulations; don't trust a calculator that tells you otherwise.
I think that precedence rules are evil.
Somewhat related, in the Io language, I was surprised to find that the expression "-23 abs" evaluates to "-23" not +23. The language desugars the expression to "0-(23 abs)". I think what threw me was the fact that Io uses a space rather than a dot for member selectors. No one would be surprised that C++ evaluates "-numObj.abs()" that way.