微軟的計算器為什麼輸入 ln 2 是先輸入 2 再輸入 ln?

換句話說,輸入指數、對數、三角、雙曲及反函數時是先輸入數字再按函數按鈕,每次使用感覺比較彆扭。


電腦自帶的計算器是模仿早期單行顯示的函數計算器,這些計算器由於顯示屏的原因只能顯示數字,不能顯示函數符號,遇到一些函數計算的時候不得不做成先輸入數值再執行函數運算指令的形式,這樣雖然和書寫習慣不一樣,但對於計算器來講運算的每一步都是一個數值,對於複雜的算式來說,總體上還是按照算式的順序來計算的(不妨試一試3+ln 2-5*e^2這樣的式子,實際上還是按從左至右的順序在計算)。不像後來的計算器擁有輸入緩存,顯示屏也增加了點陣,因此能夠直接按書寫順序將算式先放在緩存裡面然後一次性地執行計算。

這樣的計算器在現在不常見了,最經典的是夏普EL-506P,長這樣:

嘗試3+ln 2-5*e^2,按鍵順序為:

3、+、2、ln、-、5、×、2、2ndF、e^x、=

最重要的是最後面的這個「=」。可以看到整體上是將ln 2和e^2先算出來轉化成數值,再按順序執行計算,而且還是按照數學規則計算的。

至於前面有人誤導提問者所說的「逆波蘭(RPN)」輸入方式,完全是一派胡言。一種經典的RPN計算器長這樣(HP 12c):

為什麼前面說最重要的是「=」,看圖就知道了,純RPN計算器是沒有等於號的。上面的那個算式按鍵順序為:

3、ENTER、2、g、LN、+、5、ENTER、2、g、e^x、×、-

這才是真正的堆棧操作,ENTER就是將數壓入堆棧,直接使用運算符來操作棧頂的數值,真正的RPN,沒有等於號,也沒有括弧,因為根本就不需要。

沒用過計算器就別瞎說,不了解計算器也別瞎說。所以我們得到結論:微軟自帶計算器之所以輸入函數的時候需要先按數值再按函數,完全是繼承和模仿老式單行顯示函數計算器的輸入方式,以保證顯示區域只有數值,沒有各種各樣的函數符號,與逆波蘭沒有任何關係。


因為 80、90 年代的科學計算器就是這麼按的:二元運算符中置,有優先順序和括弧,一元運算符(包括各種函數)後置。這種計算器一般使用了修改版的 Shunting Yard Algorithm,不過將輸出從 RPN 形式改為直接計算,前置一元運算符的話會導致操作數棧增長過快。

現在中學生手裡那種能編輯公式的計算器是 2000 年以後的產物,之前只有很高端的編程計算器才有這個能力。

另外當你種帶統計的計算器你知道為什麼不能編輯數據么?因為它們根本沒有存儲你輸入的數據,只是存了總和、平方和等數值拿來給你算方差和概率分布……


說實話我還沒聽說一開始要編輯公式的計算器(如 fx-991)之外的計算器不是這麼工作的。


@電卓院亜紀良 的答案很專業,我從非專業人士的角度稍微補充一點東西

首先我記得科學計算器的用法在中學數學課本里應該是講過的(忘了是初中還是高中了),而且講的就是老式科學計算器的用法。當然絕大多數老師在這裡恐怕要麼是一筆帶過要麼是乾脆講都沒講吧。結果現在科技發達了,大家都用上可編程科學計算器了,這種老技術都沒人知道怎麼用啦~

唉,也不知道是該感到高興還是悲哀。

另外,微軟對計算器的設計不可謂不用心。舉個很簡單的小例子,題主可以嘗試分別在Windows計算器的標準型和科學型模式下輸入「5+8*8=」,你會發現標準型計算出的答案是104,而科學型計算出的答案是69。這是因為一般的計算器都是按照你的按鍵順序進行計算,而中後期生產的科學計算器會遵循先乘除後加減的計算原則。這和現實中的情況是完全一致的。

(此處涉及一個計算器計算優先順序的問題,具體請參看評論區。)

當然,話說回來,微軟的計算器輸入方式有沒有必要改?我覺得這個就見仁見智了。當然我個人覺得沒必要,畢竟這也算是微軟的一種情懷吧。

(下圖為安卓原生計算器,題主大概會喜歡。)


主要是你看到的這段代碼太古老了,反映了那個時候的普遍情況。

@vczh


這種方式輸入效率高!

就拿指數來說,你先輸入e,再輸入數字,還要再輸入一個作為截止,要三次輸入

而這種模式只需要兩步:數字,e

簡單算個函數啥的,效率顯不出來,但你要輸入複雜的計算,比如年金計算,根據兩組數據求線性回歸,效率提升很高。


把函數看成是映射作用於自變數上,很容易發現這種輸入方式其實很高效。

比方說,ln2就是2被ln()映射作用。如果想計算2^ln(2),那麼只要先按2,再按ln(),再按2^(),總計三步操作,確實很方便。

我們習慣用的計算器輸入方式是基於手寫的習慣,但微軟這種比較符合運算原理。


因為先按ln就不能直接使用上一次計算的結果了啊

按你那種方法該如何計算像ln(sin5))這樣的表達式呢?要知道以前大部分計算器都沒有括弧功能的


可以去了解一下逆波蘭表示法 (RPN,https://en.wikipedia.org/wiki/Reverse_Polish_notation) 的概念,這東西只需要幾個堆棧就可以很方便地實現,不會涉及複雜的數據結構,也不需要複雜的parse/interpret/compile過程。早期計算器的硬體資源就這麼些,不用RPN也不現實。硬體條件寬裕起來後RPN才漸漸少了,畢竟還需要多花時間去學是不是。只能說RPN所代表的計算模型最適合的還是資源十分有限的硬體,看看forth的應用領域就能明白。

順便吐槽一下惠普的某些計算器,幾十赫茲的32位ARM CPU、幾個兆的RAM,很捉雞了是不是?然而所有的一切除了要編譯成RPN再解釋運行,接下來還要跑在底層一個4位CPU模擬器上。。。。。所以說求積分求上個一年,這不是夢


可以少按一個等號鍵

先按下計算方式,會有一個不知道輸入的數字什麼時候結束,還要按=的操作。

先輸入數字,在按具體的計算方式,省一個步驟?


默認是Windows系統中自帶的那個計算器了。

沒看過源碼,但要說為什麼的話,我個人猜測是因為程序是採用「逆波蘭式」計算的。

簡單的解釋一下逆波蘭式好了,又成後綴表達式。我們平常書寫的數學表達式,比如計算a+b,用後綴表達式寫出來就是ab+。

複雜一點的,比如(a+b)*c和a*(b+c)的話,分別是ab+c*以及abc+*。

至於為什麼使用逆波蘭式,因為「棧」結構的限制,這樣計算比較方便。從頭開始讀取表達式,碰到一個數據,壓入棧頂;碰到一個運算,取棧頂的數據,運算後再壓入棧頂。直到表達式完畢,如果表達式合法,棧內唯一的數據就是最後的結果。

不是說處理我們平常的「中序表達式」不行,只不過用逆波蘭式對計算機而言方便一些。


推薦閱讀:

物理系適合的張量教材還有變分法教材?
學習經濟學應該掌握哪些數學工具或是學習哪些數學理論?
非數學專業本科生學習數學系專業課有哪些益處?
實變函數,泛函分析這兩門課在實際生活中有什麼用到的地方?
兩杯水,質量相等,一杯50度,一杯100度,不考慮散熱,最高可以把50度的水提高到多少度?

TAG:微軟Microsoft | 人機交互 | 數學 | 計算器 |