計算機函數和數學函數有哪些區別和關係?


這個我之前恰好寫過一篇文章,討論了這個問題。下面摘錄一部分:


在數學中有各種各樣的數學函數,比如 sin ln 等函數,sin(pi/2)=1,ln1 = 0 等等。

C 語言中的函數

在 C 語言中,我們當然也可以使用這些函數,請看如下代碼:

math.h 中包含各種數學函數的目錄,只要將其用 #include 導入,在 main 中使用 sin,log 函數時,程序才知道從哪裡找這些函數。我們在 codeblocks 中執行它,輸出如下:

在數學中,使用函數時可以省略括號,例如 sin pi/2,而 C 語言中的函數則一定要使用 (),例如 sin(pi/2)。在C語言的術語中,pi/2是參數,sin是函數,使用 sin(pi/2) 就是程序員常說的“函數調用”。

C語言函數的“副作用”

事實上,printf(“…”,…); 也是一種函數調用。但是 printf 感覺不像一個數學函數,為什麼呢?因為像 sin 這種函數,傳遞一個參數給它,它會返回給我們一個計算後的值,我們調用 sin 函數就是為了得到它的返回值。至於 printf 函數,我們並不關心它的返回值,更關心的是它的“副作用”(計算返回值的過程中,往控制檯打印的字符。)。事實上,printf 也有返回值,它返回的是實際打印的字符數。

C 語言函數可以有“副作用”,這是它與數學函數的根本區別。


嵌入式時代


兩種函數都有相似的地方,就是好像一個黑箱,送人一個或幾個參數,黑箱的另一端出來了某種結果。但是,數學函數只有數學結果,計算機語言的函數可能有數學以外的結果,比如某種操作。因為,這種操作也符合黑箱的模型:輸入-輸出。

數學上的函數純粹數學的,它本身就是一個實體。所以,可以對數學函數進行其他加工,比如求導、積分;多函數聯立;函數的函數;函數集合等等。計算機函數,即使只是數學的函數,它也只有數值計算,不能當做實體然後再加工。

如果一開始,計算機函數用了另一個名字,比如暗盒,那麼今天就不會有這樣的疑問了,相反可能會問:計算機暗盒與生活中的暗盒有啥區別?


海螺008


計算機函數是一個處理機,數學函數是一個映射


分享到:


相關文章: