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 22 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 #27

November 8

What 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 Blog

The Blood-Dimmed Tide

October 29

I've been trying to write something about Israel's attacks on Gaza for a couple hours now and while I have a lot to say about it, my thoughts are too angry to be able to write anything worth reading. For what it's worth, here's what I hav…

via Searching For Tao

So what were you up to last night?

October 6

Oh you know, the usual…

via Hey Heather, it’s me again.

generated by openring