ブログBlog

問題と答え

投稿日:2017年03月24日

こんにちは、サカです。

最近ようやく少しずつ暖かくなってきましたね。ただ、私の常駐先は
港区なので海が近いせいか、夜帰宅時はまだ少し寒いです。
皆様はいかがですか?

先日、職業訓練校の同窓会があり、参加してきました。
集まったのは8人+先生でしたが、現在プログラマーとして
働いているのは3、4人でした。皆さん色々あってそれぞれの
人生があるようです。

私は折角、先生に久しぶりあったので、少し前にネットで話題に
なったある数式について、気になっていたので質問してみました。

それは
6/2(2+1)=

というものです。
正しい答えは9なのですが、当初この問題は意外と学歴が高い人の
正解率が低いという事で報じられたのですが、色々と問題があり、
様々な議論を呼びました。

当初はプログラム経験者が/を割り算の演算子と考え、先に2(2+1)を
計算してしまい。6÷6=1としてしまって間違えやすく、出題者は
本来頭の6/2をたまたま文字でそのまま分数を表現できず/を使って
しまっただけで2分の6を意図したものだったそうで、実際は2分の6=3で、
3×(2+1)=9という問題だったと理解していました。しかし実はさらに
奥の深い問題をはらんでいました。
ちなみに最初にこの記事を読んだ時はGoogle先生でも答えは1と
間違っていました。

その後、このブログのために調べ直してみると演算子を/表記ではなく
6÷2(2+1)=
としても、多くの日本製関数電卓やスマホの関数電卓アプリでも同様に
答えが1となって間違っているという記事でした。
理由はどうもやはり2(2+1)を先に計算してしまっているようなのです。
2(2+1)は本来2×(2+1)の×を省略して書いているので、実際は
6÷2×(2+1)=
という式になります。かっこの中は優先して計算されますので
6÷2×3=
となります。また、乗算(×)と除算(÷)は加算(+)と減算(-)より
優先して計算されますが、しかし乗算(×)と除算(÷)だけの場合や
加算(+)と減算(-)だけの場合ではとくに優先順位はなく基本的に
左から順に計算されます。かっこの中は優先しますが、かっこの外は
優先されません。

なので、この計算は6÷2×3=なので6÷2は3で、3×3=9となります。
海外製の関数電卓では答えが9となるものもあるようです。
Google先生でも現在では答えが9と出てきます。

しかし、ここでネットではまた議論が展開されていきます。
それは単項式は優先して計算されるという説です。
つまり2(2+1)は単項式という1つのかたまりとして優先して計算されるという
説です。しかし変数記号を含むような場合はわかる気がするのですが、定数
だけの計算式の場合、それには無理があるように思います。
しかしながらこの元の問題に数式には表現が不十分であり、2(2+1)を優先
したいのであれば6÷(2(2+1))=あるいは6÷[2(2+1)]=と明示的に優先を
意味するかっこをつけるべきだと考えます。

訓練校の先生はそもそもプログラムでは演算子を省略するのはエラーやバグの
元なので間違いであるという答えでした。演算子を省略しないのはおのずと
優先度をはっきりとさせやすくなります。

ただ、ネットではまたまた次のような問題も出てきました。

2a÷2a=
これは答えが1とされる事が多いようで、変数があると2aは単項式として優先
されるという考え方です。しかしこれも演算子を省略しないで記述すると
2×a÷2×a=となります。なので優先度はなく順に左から計算し、2×a÷2は
aとなるので、結果a×a=となり、答えはaの2乗となります。
結局2aを単項式として優先するか、単なる2×aの省略表記とするかでネット
では意見が分かれているようでした。

やはり、
・優先したい計算には演算種別に関わらず、かっこを明示的につける。
・演算子は省略しない。
というのがプログラム的には正しいのかなと思います。

皆さんはどう思いますか?
ではまた。

PAGE TOP