浮点运算,浮点数与定点数(一)

我们评测CPU性能的时候,经常会说道一个概念:浮点运算,我经常在想,浮点运算到底是一个什么样的东西,用得着把它当成评测CPU性能的关键点吗?搞清楚这个问题,首先要说到浮点数和定点数,先看一个例子,用javascript执行console.log(0.1+0.2), 查看其输出,发现0.1+0.2≠0.3!,为什么会这样?这简直太反常识了!

计算机中数字的表示

我们知道,计算机中通过内存存储数据,一个字节有8个位,可以最大表示256个数据,如果用来表示数字,则一个字节可以用来表示0-255,我们可以通过用多个字节来表示更大的数字,如32位计算机中,我们可以直接在CPU中表示和计算最大32位整数,如果大于32位,还可以通过分步的方式进行。但即使是这样,我们还是遇到了一些问题,如果引入非整数,我们发现很多数字根本就无法全部表示,整数之间都有无穷多个数,还有一些无理数,圆周率π,√2等,也是无法进行精确表示的,所以我们在计算机中我们采用近似的方法对其进行表示。 …阅读更多>>

计算机是如何启动的?

相信很多人和我一样,从接触计算机开始,就一直在思考这个问题,当按下电脑的开机键之后,到底发生了什么,为什么这样就能启动电脑了?这篇文章我试着分析一下计算器的启动原理和过程。
计算机起动流程

CPU

CPU全称是中央处理器,是计算机的核心,包括控制单元,运算单元,存储单元和时钟等,它的主要功能是解释计算机指令以及处理各类数据。包括基本的算术操作,从存储器或者各个接口卡(外设)读取或者写入数据等。
CPU内部包含若干个寄存器,用来暂存数据或者指导CPU的运行,8086中常见的寄存器有,AX,BX,CX,DX,CS,DS,SS,ES,DI,SI,SP,BP,IP,Flag等。
我们都知道计算机只能识别二进制数据,例如指令101110000000是把寄存器ax的值设为0,因为二进制指令比较难以理解,所以人们发明了汇编语言,上述指令用汇编语言(Intel写法)描述就是mov ax,0。 …阅读更多>>

深入了解函数调用与栈

有人把程序员比作魔术师,几行简单的代码就能指示电脑作出各种各样不同的操作,作为一个合格的魔术师,只有一步一步掌握魔法的底层运行原理,才能不断创新,创造出更新,效率更高的魔法。在计算机科学中,函数是一个非常重要概念,与此相关的栈,栈如此重要,以至于CPU从底层硬件上实现了它,下面我试着分析一下函数的调用和数据栈,水平有限,如有疏漏和错误欢迎指出。

系统的硬件组成

现代计算机遵守冯·诺依曼体系结构,一般来说由CPU(中央处理器),主存储器(内存),I/O总线和各种外设组成,如下:
IA32体系结构
…阅读更多>>

奇葩的FTP协议分析

文件传输协议(FTP)诞生于1971年,至今已经有40多年历史,作为最基础常用的互联网协议之一,它到现在依然发挥着重要作用。和大多数网络协议不一样,FTP是一个非常奇葩的网络协议,说它奇葩主要是有以下两点原因:第一是FTP有两个通道,数据通道和控制通道,数据通道用来传递数据,而指令通道用来传送客户端发送给服务器的指令。第二是FTP有主动和被动两种操作模式,他们的不同在于数据通道的连接方式,接下来我们来详细分析一下FTP协议。

和HTTP协议一样,FTP协议也是文本协议,和其不同的是,FTP是有状态的信息,和SMTP更为相似,它的所有指令如下:
CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV
EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD
XRMD MKD XMKD PWD XPWD SIZE SYST HELP
NOOP FEAT OPTS AUTH* CCC* CONF* ENC* MIC*
PBSZ* PROT* TYPE STRU MODE RETR STOR STOU
APPE REST ABOR USER PASS ACCT* REIN* LIST
NLST STAT SITE MLSD MLST …阅读更多>>

河内塔与递归

河内塔,又叫汉诺塔,是法国数学家爱德华·卢卡斯于1883年发明,给定一个由八个圆盘组成的塔,这些圆盘按照大小递减的方式在三根桩柱上,需要把整个塔一道另一根桩柱上,一次只能移动一个圆盘,并且必须保证较大的圆盘永远在下面。在电影《猩球崛起》中有这样一个片段,凯撒的妈妈美瞳(Bright eyes)在实验室内在服用一种药物后,智商堪比人类,在对她进行河内塔游戏的测试中,有非常优秀的表现。
实验中的黑猩猩
河内塔还有一个美丽的传说:有64个这样的圆盘组成的塔,上帝命令一群牧师夜以继日的工作,当牧师完成上面的任务时,塔将坍塌,世界也将毁灭。 …阅读更多>>

蒙特卡罗方法和随机数

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。

蒙特卡罗方法最典型的应用是求圆周率π,如下图,在坐标系中,有一个以(0,0)为圆点,半径为1的圆,接下来画一个边长为2的正方形,做到把圆内切在正方形上,如图:
获取圆周率的方法 …阅读更多>>