計(jì)算機(jī)函數(shù)和數(shù)學(xué)函數(shù)有哪些區(qū)別和關(guān)系?
網(wǎng)友解答: 這個(gè)我之前恰好寫過一篇文章,討論了這個(gè)問題。下面摘錄一部分:在數(shù)學(xué)中有各種各樣的數(shù)學(xué)函數(shù),比如 sin ln 等函數(shù),sin(pi/2)=1,ln1 = 0 等等。C 語言中
這個(gè)我之前恰好寫過一篇文章,討論了這個(gè)問題。下面摘錄一部分:
在數(shù)學(xué)中有各種各樣的數(shù)學(xué)函數(shù),比如 sin ln 等函數(shù),sin(pi/2)=1,ln1 = 0 等等。
C 語言中的函數(shù)在 C 語言中,我們當(dāng)然也可以使用這些函數(shù),請(qǐng)看如下代碼:
math.h 中包含各種數(shù)學(xué)函數(shù)的目錄,只要將其用 #include 導(dǎo)入,在 main 中使用 sin,log 函數(shù)時(shí),程序才知道從哪里找這些函數(shù)。我們?cè)?codeblocks 中執(zhí)行它,輸出如下:
在數(shù)學(xué)中,使用函數(shù)時(shí)可以省略括號(hào),例如 sin pi/2,而 C 語言中的函數(shù)則一定要使用 (),例如 sin(pi/2)。在C語言的術(shù)語中,pi/2是參數(shù),sin是函數(shù),使用 sin(pi/2) 就是程序員常說的“函數(shù)調(diào)用”。
C語言函數(shù)的“副作用”事實(shí)上,printf(“…”,…); 也是一種函數(shù)調(diào)用。但是 printf 感覺不像一個(gè)數(shù)學(xué)函數(shù),為什么呢?因?yàn)橄?sin 這種函數(shù),傳遞一個(gè)參數(shù)給它,它會(huì)返回給我們一個(gè)計(jì)算后的值,我們調(diào)用 sin 函數(shù)就是為了得到它的返回值。至于 printf 函數(shù),我們并不關(guān)心它的返回值,更關(guān)心的是它的“副作用”(計(jì)算返回值的過程中,往控制臺(tái)打印的字符。)。事實(shí)上,printf 也有返回值,它返回的是實(shí)際打印的字符數(shù)。
C 語言函數(shù)可以有“副作用”,這是它與數(shù)學(xué)函數(shù)的根本區(qū)別。
網(wǎng)友解答:兩種函數(shù)都有相似的地方,就是好像一個(gè)黑箱,送人一個(gè)或幾個(gè)參數(shù),黑箱的另一端出來了某種結(jié)果。但是,數(shù)學(xué)函數(shù)只有數(shù)學(xué)結(jié)果,計(jì)算機(jī)語言的函數(shù)可能有數(shù)學(xué)以外的結(jié)果,比如某種操作。因?yàn)?,這種操作也符合黑箱的模型:輸入-輸出。
數(shù)學(xué)上的函數(shù)純粹數(shù)學(xué)的,它本身就是一個(gè)實(shí)體。所以,可以對(duì)數(shù)學(xué)函數(shù)進(jìn)行其他加工,比如求導(dǎo)、積分;多函數(shù)聯(lián)立;函數(shù)的函數(shù);函數(shù)集合等等。計(jì)算機(jī)函數(shù),即使只是數(shù)學(xué)的函數(shù),它也只有數(shù)值計(jì)算,不能當(dāng)做實(shí)體然后再加工。
如果一開始,計(jì)算機(jī)函數(shù)用了另一個(gè)名字,比如暗盒,那么今天就不會(huì)有這樣的疑問了,相反可能會(huì)問:計(jì)算機(jī)暗盒與生活中的暗盒有啥區(qū)別?