第三章
计算机进行小数运算时出错的原因——大家可能会认为“万能的计算机是不会出现计算错误的”。但实际上,依然存在程序运行后无法得到正确数值的情况。其中,小数运算就是一个典型的例子。这一章章将会说明计算机进行小数处理的机制。这也是所有程序员都需要掌握的基础知识之一。掌握了这个知识,就可以了解了计算机在运算时为什么会出错,在第 2 章中,我们对整数的二进制数表现方法做了说明。由于计算机内部所有的信息都是以二进制数的形式来处理的,因此在这一点上,整数和小数并无差别。不过,使用二进制数来表示整数和小数的方法却有很大的不同。通过本章的阅读可以更好的了解计算机。了解了将二进制数表示的小数转换成十进制数的方法后,计算
机运算出错的原因也就容易理解了。这里我先把答案告诉大家,计算机之所以会出现运算错误,是因为“有一些十进制数的小数无法转换成二进制数”。例如,十进制数 0.1,就无法用二进制数正确表示,小数点后面即使有几百位也无法表示。二进制数是连续的,十进制数是非连贯的。更了解了浮点数,像 1011.0011 这样带小数点的表现形式,完全是纸面上的二进制数表现形式,在计算机内部是无法使用的。很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数。双精度浮点数类型用 64 位、单精度浮点数像0.3333…这样相同数值无限循环的值称为循环小数。计算机是功能有限的机器,无法直接处理循环小数。
更了解了如何避免计算机出错——计算机计算出错的原因之一是,采用浮点数来处理小数(另外,也有因“位溢出”而造成计算错误的情况)。作为程序的数据类型,不管是使用单精度浮点数还是双精度浮点数,都存在计算出错的可能性。接下来将介绍两种避免该问题的方法。首先是回避策略,即无视这些错误。根据程序目的的不同,有时
一些微小的偏差并不会造成什么问题。另一个策略是把小数转换成整数来计算。计算机在进行小数计算时可能会出错,但进行整数计算(只要不超过可处理的数值范围)时一定不会出现问题。因此,进行小数的计算时可以暂时使用整数,然后再把计算结果用小数表示出来即可。

浙公网安备 33010602011771号