随笔分类 - 第三章:计算机进行小数运算时出错的原因
摘要:最后再补充说明一下二进制数和十六进制数的关系。在以位为单位表示数据时,使用二进制数很方便,但如果位数太多,看起来就比较麻烦。因此,在实际程序中,也经常会用十六进制数来代替二进制数。在C语言程序中,只需在数值的开头加上Ox(0和x)就可以表示十六进制数。二进制数的4位,正好相当于十六进制数的1位。例如
阅读全文
摘要:计算机计算出错的原因之一是,采用浮点数来处理小数(另外,也有因“位溢出”而造成计算错误的情况)。作为程序的数据类型,不管是使用单精度浮点数还是双精度浮点数,都存在计算出错的可能性。接下来将介绍两种避免该问题的方法。(1)是回避策略,即无视这些错误。 根据程序目的的不同,有时一些微小的偏差并不会造成什
阅读全文
摘要:该程序执行后,十进制数0.75用单精度浮点数来表示就变成了0-01111110-10000000000000000000000(图3-7)。 加入破折号(-)是为了区分符号部分、指数部分、尾数部分。这里,符号部分为0,指数部分为01111110,尾数部分为1000000000000000000000
阅读全文
摘要:尾数部分使用正则表达式(按照特定的规则来表示数据的形式即为正则表达式,除小数外,字符串以及数据库等都有各自的正则表达式),可以将表现形式多样的浮点数统一为一种表现形式。例如,十进制数0.75就有很多种表现形式,如下图所示: 虽然它们表示的都是同一个数值,但因为表现方法太多,计算机在处理时会比较麻烦。
阅读全文
摘要:像1011.0011这样带小数点的表现形式,完全是纸面上的二进制数表现形式,在计算机内部是无法使用的。那么,实际上计算机是以什么样的表现形式来处理小数的呢?我们一起来看一下。很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数。双精度浮点数类型用64位、单精度浮点数类型用3
阅读全文
摘要:由于前一节了解到将小数二进制数转换成十进制数的方法后,计算机运算出错的原因也就容易理解了。之所以容易出错的原因是“有一些十进制数的小数无法转换成二进制数。例如:十进制数是0.1,就无法用二进制数表示。 上图是小数点后四位能够用二进制数表示的数值(二进制数是连续的,十进制数是非连贯的)。同时通过这个图
阅读全文
摘要:由于计算机内部所有的信息都是以二进制数的形式来处理的,因此在这一点上,整数和小数并无差别。不过,使用二进制数来表示整数和小数的方法却有很大的不同。 上图是把1011.0011这个小数二进制数转换成十进制数。 位权是用来与各数字位的数字相乘的数值。
阅读全文
摘要:首先,我们来看一个计算机运算错误(无法得到正确结果)的例子。下图是将0.1累加100次,然后将结果输出到显示器上的C语言程序。 运行过程是这样的: 首先把0赋值给变量sum,然后在此基础上累加100次0.1。sum+=0.1;表示为现在的sum值加0.1。for(i=1;i<=100;i++).)表
阅读全文