手機計算器全部陣亡,試試這個看看

今日曝出一條新聞:手機計算器全部陣亡:10%+10%不是0.2,錯成了0.11了。我趕緊拿出了我的華為計算器驗證了一下,果然錯成0.11了。又試了一下50+50%=75,啊???

其實換一種理解方式,先換一個場景一說你就明白了:股票50元,上漲50%,是不是75元。

M+N%解釋為:在基數M的基礎上上漲N%,在某個時代部分程序員寫計算器時是這樣理解的。但是在C/C++/JAVA等等編程語言裡面,%解釋為格式符或者取餘數操作,直接寫 50+50%是會編譯錯誤的,編譯器自身都無法解釋語法,不屬於該語言可接受的語法,二義性無法消除。所以應該還是人類理解方式的問題了。純應用層面的東西,由應用時的實際場景去的理解和處理,其實兩種理解方式在兩種場景下去看都是對的。

如果是換到我們正常生活中來,在高考考試中,你會怎麼做?如果按照這樣的理解去解釋,那麼上面就不對了,這種場景下,屬於是代碼裡面把運算符結合優先順序搞錯了,屬於程序員犯的低級錯誤。

如果在計算器上直接輸入如下長算式:tan(45)*sin(30)*Log10(1000)*(((5π-65)*50%)/sin(30)*log10(100)+(56+45%)*5.58)*(5+7)+8555*(50*50/62/60)

那結果又會是什麼樣的了?我在2005年的時候寫了一個計算器(PC版),已經實現了這個強大的功能。手工輸入任意算式均可計算。

界面如下:

手機計算器全部陣亡,試試這個看看

其實程序邏輯還是很複雜的。

主要用到知識:

1、編譯原理的後序表達式

2、數據結構的棧

3、運算符優先級。

如果你自己來寫一個的話,試試你要多久?


分享到:


相關文章: