The correct answer to `8 ÷ 2(2+2)` is 1
This is a tricky little arithmetic problem that has been firing up conversations (fights) online.
It says something about the sorry state of our education system that so many Twitter users believed the answer to be 16. In this post, I will demonstrate conclusively that the correct answer is in fact 11.
Method
We take our original expression:
8 ÷ 2(2+2)
Begin by evaluating everything within parentheses first.
8 ÷ 2(4)
Next, we evaluate the call to the function 2
2 passing in the argument 4
:
8 ÷ 8
The last step is a trivial division.
1
QED.
Okay, to get ℝ for a moment3
Obviously, this was silly. Or was it?
Of course function application isn’t what anybody means when they write 2(4)
. But why not? a(b)
means multiplication, you say — but isn’t a(b)
also the syntax we commonly use in mathematical notation to express function application?
Let me ask you this: how do you read 1/10x
? I find it perfectly reasonable to interpret this either as (1/10) * x
or as 1 / (10*x)
. If there are two reasonable interpretations, then the original expression was unclear.
The point of this question is that the notation is deliberately ambiguous. To consider it seriously is somewhat of a waste of time. It is the responsibility of the writer to express their intention unambiguously, and, having failed to do so, the result of 8 ÷ 2(2+2)
is unspecified.4
Understanding PEMDAS
There is an actual lesson to be learned here: blindly applying the “rules” of arithmetic order is not the way.
I tend to think that mnemonics such as “please excuse my dear Aunt Sally” actually do a disservice to math students. Using this memory system to remember the names and order of the planets is totally justified — this information is completely arbitrary. The order of operations is not arbitrary, at all, and the implication that it might be is undesirable.
So what is the order of operations? It is a convention, like any other language. It hardly matters much what the convention is — we can communicate as long as we can agree to it.
“Always evaluate from left to right” would have been a perfectly acceptable convention to settle on. Equally good would have been “always right to left”, which would have been more consistent with the Arabic from which our numerals are derived.
Whatever convention is used, we would at times have a need to tell the reader that a particular subexpression needs to be evaluated in a different order. Thus, parentheses. You don’t need PEMDAS to remember that parentheses come first, because coming first is the entire point of parens. Besides, since they always come in pairs, there’s basically no other way to parse them.
At some point, by someone, it was decided that it’s very often useful to perform the “larger” operations first — meaning exponentiation, then multiplication/division, and finally addition/subtraction. The decision to prioritize these “greater” operations first was a practical one, intended to reduce the number of parentheses. A convention was born: most powerful operations first.
Just as multiplication is repeated addition, and exponentiation is repeated multiplication, we have tetration which is repeated exponentiation. If we commonly used tetration, we would have a widely-agreed-on operator for it, and its precedence would presumably be higher than exponentiation.
It is necessary to understand that multiplication and division are inverses of one another, as are addition and subtraction. They are, in a sense, the same thing, and to prioritize one over the other would be arbitrary.5
This also implies that logarithmation6, being the inverse of exponentiation, should share its precedence. If we had a special notation for logs, it certainly would, but the notation we use (logx(y) or log (x,y)) already prevents ambiguity.7
A student who understands this series of “levels” of operations8, who understands that parentheses can only do one thing, and who understands the duality between addition/subtraction and multiplication/division is a student who has no need for PEMDAS.
more from the friends of danso:
rustc_codegen_gcc: Progress Report #33
July 5What is rustc_codegen_gcc? rustc_codegen_gcc is a GCC ahead-of-time codegen for rustc, meaning that it can be loaded by the existing rustc frontend, but benefits from GCC by having more architectures supported and having access to GCC’s optimizations. …
via Antoyo's BlogThe EU Elections: Sliding Towards Crazy
June 10Stephen asked me today: "WTF is with those European elections?" and I found myself responding with a ranty novel. I'm going to keep it here for posterity. Perhaps unsurprisingly, the vibe here in the UK is more-or-less "who cares, we left!…
via Searching For TaoInsights and understanding — AI won't take your job
April 7When I last visited my parents, my mom and dad asked me whether I was worried about ChatGPT or other AI systems taking away programmers’ jobs and whether I was worried about my own future. My answer to them—and this might be a naïve take—is that I’m not v…
via Reasonable Performancegenerated by openring