How is it that -3 * -3 = 9, but -3^2 = -9? I can understand -(3^2) equaling -9, but according to Please Excuse My Dear Aunt Sally, exponents come before multiplication (in reference to -3^2 = -9). Side note: (-3)^2 does = 9.
Sincerely,
puzzled noob
See the table here:
https://docs.julialang.org/en/v1/manual/mathematical-operations/#Operator-Precedence-and-Associativity-1
Julia’s got quite a few more operations than just the six enumerated in PEMDAS. Specifically, unary minus is itself an operation that fits between “excuse my”.
4 Likes
Thank you mbauman. I’m not sure why the developers chose to implement Julia this way, but the output makes sense now. [Disclaimer: I know extremely little about development]
I was wondering GreyMoth, how would you intrepret each of the three mathematical expression below?
A: “5-3^2”
B: “0-3^2”
C: “-3^2”
Because B and C are exactly the same mathematically.
Julia matches the way mathematicians write expressions. It makes the rules a little subtler, but when someone writes -3^2
on paper (or in LaTeX) they do not mean (-3)^2
, they mean -(3^2)
. Also, this shouldn’t be all that surprising since subtraction—or negation, technically I’m this case—has lower precedence than exponentiation. I guess you are interpreting -3
as a negative literal rather than interpreting the -
as a minus operator. The later is the interpretation that matches mathematical notation and the one which Julia uses.
6 Likes
Frankly, it should not matter. Most people rely on maybe the 2–3 most obvious precedence order pairs (eg things like +
vs *
), which are more or less the same in every language.
The rest should never be relied on, especially for people who use more than 1 language, because it can result in very subtle bugs that can only be caught by painstakingly looking up the exact rules. When in doubt, use ()
s. Always be in doubt.
2 Likes
The Wikipedia page on order of operations explicitly calls out this exact example:
There are differing conventions concerning the unary operator −
(usually read “minus”). In written or printed mathematics, the expression −3^2
is interpreted to mean 0 − (3^2) = − 9
.
So what we’re doing here is not exactly controversial.
Basically, there are two possible reasonable interpretations of -3^2
:
^
applied to the -3
and 2
, or
-
applied to ^
applied to 3
and 2
.
Julia chooses the interpretation that matches standard mathematical convention. Moreover, if we used the first (non-standard) interpretation, then -3^2
would produce a different result than x = 3; -x^2
since -x
is not a literal so only the second interpretation is possible. The two expressions would parse differently and the former would produce 9
while the latter would produce -9
, which certainly seems like a bad situation.