《程序是怎样跑起来的》第三章的内容是关于计算机进行小数运算时出错的原因。
计算机运算出错的原因是有一些十进制的小数无法转换成二进制数。例如,十进制数0.1,就无法用二进制数正确表示,小数点后面即使有几百位也无法表示。
什么是浮点数呢?很多编程语言中都提供了两种表示小数的数据类型,分别是单精度浮点数和双精度浮点数。双精度浮点数类型用64位、单精度浮点数类型用32位来表示全体小数。在C语言、java语言中,双精度浮点数和单精度浮点数分别用double和float来表示。浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数,所以基数自然也就是2。因此,实际的数据中往往不考虑基数,只考虑符号、尾数、指数这三部分即可表示浮点数。
正则表达式,是一种用于匹配和操作文本的工具,它由普通字符(如字母、数字等)和特殊字符(称为元字符)组成,用于描述要匹配的文本模式。浮点数的尾数部分使用正则表达式,可以使表现形式多样的浮点数统一为一种表现形式。EXCESS系统不好理解,下面举例说明,假如有这样一个游戏,用1~13的扑克牌来表示负数。这时就可以把中间的7这张牌当成0。如果扑克牌7是0,10就表示+3,3就表示-4。事实上,这个规则说的就是EXCESS系统。
我们如何避免计算机出错呢?首先我们要明白计算机出错的原因,计算机出错的原因之一是,采用浮点数来处理小数。避免出错首先是回避策略,即无视这些错误。第二是小数转换成整数来计算。计算机在进行小数计算时可能会出现错误,但进行整数计算(只要不超过可处理的数值范围)时一定不会问题。
涉及到很多底层的技术细节,但作者通过生动的比喻和详细的解释,使我能够更容易地理解这些复杂的概念。例如,作者将编译过程比作翻译工作,将链接过程比作拼图游戏,这些形象的比喻让我能够更直观地理解这些过程。编程不仅仅是写代码,更需要理解程序的运行原理,需要掌握编译和链接等底层技术。同时,编程也是一种创造性的工作,需要我们不断地学习和探索,才能编写出更好的程序。
最后,《程序是怎样跑起来的》一书第三章的内容让我受益匪浅,我也学到了关于如何避免计算机进行小数运算时出错的原因。