计算机计算出错的原因之一是,采用浮点数来处理小数(另外,也有因“位溢出”而造成计算错误的情况)。作为程序的数据类型,不管是使用单精度浮点数还是双精度浮点数,都存在计算出错的可能性。接下来将介绍两种避免该问题的方法。
一、回避策略
首先是回避策略,即无视这些错误。根据程序目的的不同,有时一些微小的偏差并不会造成什么问题。例如,假设使用计算机设计工业制品。将100个长0.1毫米的零件连接起来后,其长度并非一定要是10毫米,10.000002毫米也没有任何问题。一般来讲,在科学技术计算领域,计算机的计算结果只要能得到近似值就足够了。那些微小的误差完全可以忽略掉。
二、把小数转换成整数来计算
另一个策略是把小数转换成整数来计算。计算机在进行小数计算时可能会出错,但进行整数计算(只要不超过可处理的数值范围)时一定不会出现问题。因此,进行小数的计算时可以暂时使用整数,然后再把计算结果用小数表示出来即可。例如,本章一开头讲过的将0.1相加100次这一计算,就可以转换为将0.1扩大10倍后再将1相加100次的计算,最后把结果除以10就可以了(代码清单让所示)。
#include<stdio.h> void main() { // int是整数的数据类型 int sum; int i. // 将保存总和的变量清0 sum = O; // 将1相加100次 for(i = 1; i <= 100; i++){ sum += 1; } // 总和结果除以10 sum /= 10; // 显示结果 printf("*d\n", sum); }
除此之外,BCD(Binary Coded Decimal) 也是一种使用二进制表示十进制的方法。简单来讲,BCD就是用4位来表示0~9的1位数字的处理方法,这里不再做详细说明。在涉及财务计算等不允许出现误差的情况下,一定要将小数转换成整数或者采用BCD方法,以确保最终得到准确的数值。
参考资料:《程序是怎么跑起来的》
完结!