计算机函数和数学函数都是函数。如果抽象地来说函数的意思就是一个输入产生一个输出,那么这个输出就是输入的函数。输入和输出之间的这种关系叫做函数映射。

上图:函数的基本定义示意

不管是计算机函数,还是数学函数,它们都符合函数的这个抽象定义。

函数的要素输入

输出

单向有序对应(输入对应到输出)

上图:这是函数,因为不同的输入值有唯一的输出值。

上图:这不是函数,因为相同的输入值对应了不同的输出值。

换一种你可能觉得匪夷所思的方式来描述函数,可以这么来讲:

函数实际上是一个两两有序配对的集合,一个X值仅对应一个Y值,但一个Y值不一定对应一个X值。这个X与Y值的配对的集合G就是函数的图,如果用坐标系表示就是我们经常看到的那种函数曲线图。

上图:一个典型的函数曲线图。

从形式上讲,函数图和函数是相同的东西,但函数图隐藏了函数作为某种过程的内涵。因此,在通常的用法中,函数和函数图是区分开来讲的。y=f(x)这种表示法就代表了x通过一个函数的过程f,映射(或者输出)y的全部含义。

此外,函数也称为映射,虽然“映射”和“函数”之间还是有一些差别。

函数的基本定义是数学的函数和计算机函数通用的,否则就不叫函数。下面我们分开看下数学函数和计算机函数的异同。

数学的函数

函数最早就是在数学领域定义的,因此数学的函数的定义基本上与上面讲的函数的基本定义类似,但是数学的函数限定函数的输入和输出对象必须是数,而不是其它什么猫猫狗狗。

你不能说我有一个函数:f(x),然后当x=猫,算出来f(x)=狗。

这样的函数在数学上不成立的,其根本原因在于数学的运算只能适用于数,这里的x代表的是一个数,只能从数的集合当中选取。

如果我们把上面的例子再复杂一下,例如:

函数f(x)=2x+1;但你要让我算当x=猫时的函数值,那我最多可以代数推理到这一步:

f(x)=2猫+1,但是2x猫是什么含义,2猫能跟+1运算吗?显然不行,这哪里哪呀?完全是牛头不对马嘴。

所以,数学的函数,限定了函数的取值范围是“数”!

这和计算机的函数就有了差别。

计算机的函数

计算机也是建立在数学的原理之上,从计算机的本质上讲,计算机就可以被视为一种函数——一种物理实现的函数,它有输入,有输出。至少从物理原理上讲,它是以电脉冲信号作为输入,并输出电脉冲信号。而且计算机确保了函数的一个最基本特征,即有序对应(或者说映射),相同的输入对应相同的输出,绝对不能出现相同的输入居然产生不同的输出的情况。所以,计算机本身就具备了函数的某些特质。

上图:计算机的基本功能是不是跟我们前面对函数的基础定义的图示有些相似?

抛开计算机的物理硬件属性(硬件部分)来说,单看计算机的逻辑属性(即软件部分),也就是基于计算机的运作方式而保证成立的那套运作机制,恰恰就是数学函数。计算机的软件部分可以完全被视为纯粹的函数,这一点问题都没有,因为计算机的软件体系完全符合函数的基本定义。

只不过,计算机软件设计人员利用计算机高级编程语言的设计思路,将数学函数的原理和描述方式引入到了计算机的设计和计算机的编程开发当中。并且将复杂的概念建立在了数学函数的基础上,实现了计算机最重要的操作和行为概念(我们用计算机可不是仅仅用来做算数)。这更强调了之前函数的通用定义当中关于函数是一个“过程”的内涵。

计算机的编程语言不是给计算机看的,而是给程序员看的,是方便程序员自己知道自己想让计算机执行什么指令。虽然程序员输入的是一些程序代码,但实际上这些程序代码最终会被编译为数(包括指令和数据等等)。

上图:程序的流程图:大量函数相互连接就构成了复杂的逻辑操作体系。

但实际上计算机的操作和行为,最终落到计算机的硬件底层都是建立在数字信号的基础上的,这种操作和行为实际上就是大量函数的宏观集合——通过运算实现对现实世界的反映和反馈。

举几个典型的此类操作的例子,看看它们是如何由函数构成的:计算机指令——实际上是一系列的编号以及相关的参数,每一条计算机指令都定义了输入值x,计算含义f,指令执行后会产生对应的输出值和相关操作(以数字信号的方式)。

对计算机内存的读、写——实际上是输入一个地址值,输出该地址固定长度的数据的值。

对特定设备的操作——实际上在一系列的内存地址写入各种数值,然后以一个数值请求处理器控制特定的设备来读取这些数据。

显示屏显示图像——是以显存内的大量数值作为输入,以屏幕上的矩阵作为输出(矩阵也是数的一种形式,至少矩阵可以等效于一个数的有序集合)。

上图:内存的寻址就是一种典型的数值控制的操作,一串10的组合决定了应该从内存当中的哪一块提取数据。所以像内存这个设备输入数值,即可获取另一串输出的数值。内存也是一个函数。

上面是从计算机的底层机制来说的,也就是说计算机的底层完全是基于函数的,所谓的计算和操作一切都是函数。

上图:高级语言(人可读的指令)是如何变成CPU可读的指令,一切都会落到01构成的数值上,作为CPU的输入得到处理。这些数值不仅提供了x,也提供了f,应该说是高层的f,意思是处理数据的方法。高层的f会被变成底层的f,从而会被CPU执行(实际上CPU只知道少量的固定的底层的f)。

而对于计算机编程语言当中的函数来说,函数就具备了更高层次的含义。诸如一个C语言的函数,或者java语言的函数……

这些函数在另一个层面上体现了一些与数学上函数的不同。由于计算机高级语言品种非常多,我这里也就不过多展开,只说一点点抽象的共性:

在高级编程语言当中,函数和过程(routine)具有类似的含义或者本质,这是对函数'过程'含义的强化,也就是前面我们提到的那个f()的含义。我们在类似C语言系的语言当中,函数、过程和方法等概念具有类似的含义。这些概念更突出函数的过程属性。即在函数的运算之中,会执行一些操作,带来一些后果,重点在于这些操作和操作的后果,而不在于函数的输出值。但实质上,这些操作的后果也就是函数的输出值。

通过函数集合的宏观化,函数就变成了“宏”(macro)——一种具有动作属性的整体概念,即操作。读到这里,读者应该可以联想到为什么excel里面的VBA程序会被称为“宏”。

实际上宏就是一种动作,或者操作的集合,其目的不是给出输出的数值,而是给出一系列动作。但归根就底,宏也是建立在堆叠的函数的基础上的,是一个封装的整体概念,它不过是强调了函数的过程属性而已。

上图:Excel中基于VBA的宏程序示例

小结一下:

计算机由于具备了强大的计算能力,于是可以高效地处理大量的函数,因此在此基础上,人类使得计算机的软件体系形成了“操作”的概念,因为我们不仅仅是想要计算机通过复杂的函数计算告诉我们一个最终值,而是需要计算机通过计算出来的大量的值去做一些事情。这是将计算力变成生产力的关键。但不管操作也好、宏也好、其微观都是建立在单个简单的函数的基础上的,其原理也是建立在数学函数的概念之上的,输入-过程-输出的映射是计算机的基本原理。当硬件确保了这种基本原理的稳态运作,就成了计算机。即便用这样的定义去衡量中国人发明的算盘也是一样的道理。

总结

数学上函数的概念是计算机函数概念的微观原理基础。计算机发展到高级阶段之后,计算机函数的含义更多地强调了函数的过程特性,从而形成了强大的操作能力,虽然这种操作能力最终是由硬件来实现的。但无论怎么发展,计算机函数的内涵都是符合数学函数的内涵的。

c语言里的函数和数学里面的函数有什么区别,计算机函数和数学函数有哪些区别和关系?...相关推荐

  1. 数学在计算机科学上的应用文献,计算机科学技术在数学中应用浅析

    摘 要:人类社会文明的进步与发展过程中,数学在社会各领域中的应用越来越广泛,作用越来越大,已成为当代高新技术的重要组成部分.现代文明技术在计算机高度发展的今天,计算机科学技术在数学中应用越来越受到人们 ...

  2. 金融计算机怎么学,为什么许多人建议本科学数学,研究生阶段转金融或者计算机?学数学的发展方向只有纯数学计算机以及金融吗?......

    最烦听话只听半句话的人,自己作死不说却怪别人误导. 数学专业的学生,应该知道函数的定义域有多么的重要. 定义域也不看,就把函数拿来到处去套用,不错才怪呢. 说话是有前提的,不看前提就断章取义,当然会理 ...

  3. 浅谈数学在计算机科学中的应用,浅谈计算机科学技术在数学思想中的应用(原稿)...

    <浅谈计算机科学技术在数学思想中的应用(原稿).doc>由会员分享,可免费在线阅读全文,更多与<浅谈计算机科学技术在数学思想中的应用(原稿)>相关文档资源请在帮帮文库(www. ...

  4. 中职计算机对数学知识的要求,中职计算机专业的数学教学研究

    中职计算机专业的数学教学研究 数学作为一门中职学校的主要文化基础课之一,它不但是处理日常社会生产和生活的工具,而且也是专业课程学习和进一步进修学习的基础,具有很强的实用性.下面是小编搜集整理的相关内容 ...

  5. c语言里函数rand()和srand()的用法

    c语言里函数rand()和srand()的用法 rand(void)用于产生一个伪随机unsigned int 整数. srand(seed)用于给rand()函数设定种子. srand 和 rand ...

  6. c语言里的fun是什么函数,c语言fun函数有什么作用

    c语言fun函数的作用是被主函数所调用,来定义一个函数或方法,这样在引用时可以用fun表示,比如[int fun(int x,int y)]. c语言fun函数的作用是: C语言中,fun函数通常被主 ...

  7. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 三、C++语言里的函数指针...

    先来回顾一下,我们说函数指针有一个重要的特性,它可以指向任何形参相同的函数.这样可以用统一的方式去调用不同的函数.(这个我还是希望笨笨同学好好思考一下,我想也是程序思想的精髓之一吧),就好比武功秘籍中 ...

  8. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 二、C语言里的函数指针...

    二.C语言里的函数指针 上一节里介绍了回调函数,模块A提供了该函数 然后模块A调用B B再返过来调用A提供的函数,再处理最后返回结果给A.晕了.还是画个图.一般调用情况: 图2-1 有回调函数的调用情 ...

  9. C语言可以停用函数吗,C语言里有能实现关机的函数吗

    C语言里有能实现关机的函数吗 答案:5  信息版本:手机版 解决时间 2019-10-06 09:24 已解决 2019-10-05 10:22 如果有,包含在哪个头文件中 最佳答案 2019-10- ...

  10. c语言里主函数指什么,C语言里的主函数是什么

    main(),在c语言中称之为"主函数",一个c程序有且仅有一个main函数,任何一个c程序总是从main函数开始执行,main函数后面的一对圆括号不能省略. 具体形式如下: m ...

最新文章

  1. 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论
  2. JPA关系映射系列一:one-to-one外键关联
  3. 世纪渣男何书桓! | 今日最佳
  4. 网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...
  5. i7台式电脑配置推荐_2020年台式电脑配置推荐
  6. 支付宝架构师的总结:为什么他们能抗住万亿级流量的高并发?
  7. C/C++[codeup 1967]数组逆置
  8. 数据洞察医药电商,解析医药电商行业现状及发展趋势
  9. when函数c语言,when表达式
  10. leaflet所有示例下载
  11. Android条形码带数字,android – 使用条形码数字获取名称,价格等产品信息
  12. 【10个精品网站】找素材、找图片、PDF在线工具、免费图片降噪修复、免费可商用字体、PPT模板
  13. 如何将markdown文件转成word
  14. Java 移位、逻辑运算符详解(~史上最全|吹牛逼)
  15. 多个txt文件合并成一个文本
  16. 让 Python 拥有 C/C++ 一样的速度,编译神器 Codon 发布!
  17. 路由器和猫,集线器,交换机的区别
  18. 台风大涡模拟三维可视化
  19. MATLAB程序到底怎么调试?
  20. js高级-正则表达式

热门文章

  1. mysql使用结巴语句_MySQL 结巴中文分词插件 SqlJieba
  2. matlab星三角变压器,什么是变压器星三角接法
  3. STM32cubIDE 黑色主题_儿童画创意第二弹 | 绘画的秘密+万圣节主题画,10个创意教程一次看完!...
  4. 什么是QT(轻松的帮你做带界面的软件)
  5. Qt深入浅出(一) 从零开始写Qt应用
  6. ZOJ-3939 The Lucky Week
  7. staruml 依赖于 libgcrypt11 (= 1.4.5);然而:未安装软件包 libgcrypt11。
  8. RPM 包的构建 - SPEC 基础知识
  9. 报错 Delete `··` prettier/prettier解决方法
  10. 从零开始学习idea开发vue