2011年4月12日 星期二

約定俗成

有朋友問,48 ÷ 2 (9+3) 等於多少?話說用計算機的話,有些計算機得出 2,有些得出 288,原因自然是 48 ÷ [2(9+3)] 和 48 ÷ 2 x (9+3) 的分別。那麼,到底那一個才是正確答案?

我的看法是兩個演譯都不能說錯。

如果我一看到這個算式,我會認為是 48 ÷ [2(9+3)] = 2。但如果你考慮到 2(9+3) 的定義的話,它的確是等於 2×(9+3),即 2(9+3) 和 2×(9+3) 是完全相同的。

所以問題的關鍵是 2(9+3) 應否被視為 (2x(9+3)) 而非 2x(9+3)。由於高等數學裡很少用到乘號和除號,因此這個似乎沒有嚴格定義(也許有但我不知道吧),於是這件事變得有點約定俗成。

在 「習俗」上,我想很多人都會同意「不寫出來的乘號」的運算次序應該比「除號」為高,所以 48 ÷ 2 (9+3) = 48 ÷ [2(9+3)] = 2 至少在「常理」上是正確的。但就我所知,數學上的確沒有這個規定,因此如果認為 48 ÷ 2 (9+3) = 48 ÷ 2 x (9+3) = 288 的話,我也找不到任何理由認為有錯。

故此我的結論是 48 ÷ 2 (9+3) 這種寫法不好,還是用分數或加個括號避免混淆吧。



題外話一:

語意上出現混淆(ambiguity)並不罕見,除了在數學外,中文和英文也有很多例子(數學也是一種語文)。例如:

「曼聯戰敗了阿仙奴獲得了冠軍」
  • 曼聯戰敗了(輸了),阿仙奴獲得冠軍?
  • 曼聯戰敗了阿仙奴(曼聯擊敗阿仙奴),所以曼聯獲得冠軍?
「Someone who knows Alan or Billy is here.」
  • Someone who knows (one of Alan and Billy) is here?
  • (Someone who knows Alan) or (Billy himself) is here?


題外話二:

數學名詞雖然有嚴謹的定義,但「約定俗成」的例子其實也很多:
  • ab2 是指 a(b2) 而非 (ab)2,但 cm2 卻是指 (cm)2,即 1 cm2 = (0.01 m)2 而不是 0.01(m2)。
     
  • sin 2 a 是指 (sin 2) a 還是 sin(2a)?絕大多數人接受是 sin(2a),但 sin a cos b 是指 (sin a)(cos b) 還是 sin (a cos b) 呢?絕大多數人會認為是 (sin a)(cos b)。兩者看來是有點矛盾的,但這是「俗成」了。

4 則留言:

湍野 提到...

這篇文章令我想到一個電腦科學的問題。給定一個 formal language ,存不存在一個演算法,可以證明或否證以下陳述:

「此語言的任何句子都不會有 ambiguity」?

如果是否證的話,這個算法可否找出 counterexamples ?

Kahoo 提到...
作者已經移除這則留言。
Kahoo 提到...

有趣有趣...
我不懂電腦科學,但有一點不太明白,在一個 formal language 中應該所有運算次序都是 well-defined 的,為何會有 ambiguity?(「sin a cos b」這種 language 就是「不夠 formal」所以才有 ambiguity。)可以舉一個例子嗎?

湍野 提到...

我都沒怎麼研究computer science。是我沒仔細讀過"formal language"的定義……我原來想問的就是「不夠 formal」的language。

(再看一些資料)我問的問題,在應用層面好像是跟 compiler design 有關的吧。