计算机函数和数学函数有哪些区别和关系?


这个我之前恰好写过一篇文章,讨论了这个问题。下面摘录一部分:


在数学中有各种各样的数学函数,比如 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


计算机函数是一个处理机,数学函数是一个映射


分享到:


相關文章: