误差来源

来源:互联网 发布:17寸笔记本 知乎 编辑:程序博客网 时间:2024/05/03 03:51

13.6  相等判断

与整型数不同,浮点数是有精度限制的。数学上的同一个值由于来源不同,计算过程不同,精度也不同,一般不会严格相等。

13.6.1  误差来源

一般而言,浮点计算中存在下列误差来源:

(1)表示误差

在第5章中已经说明,浮点数实际上是用一个有限序列逼近数的方式来表示数值的。对某些数而言,这种方式无法绝对准确地表示它的值,例如1.4使用float表示是1.3999999,有近 的误差(float的有效数字是7位)。这种误差来自浮点数的定义,是不可避免的,但可以通过使用更高精度的格式来减小。例如,1.4使用double表示是1.3999999999999999,误差降为 (double的有效数字是15位)。

更详细的解释参阅第5章。

(2)数据误差

计算中不可避免地会使用不同来源的数据,这些数据有不同的精度。例如,一辆汽车的速度用GPS设备测量和用红外测速仪测量,结果是不同的。即使是数学常数,不同的来源也有不同的精度。例如 ,自己编写代码时可能定义为:

#define PI    3.1415926

而浮点库可能使用的是3.1415926535897932。在这种情况下,同一个sin(PI/2.0)将有不同的结果。

小心地设计系统、编写代码可以减小这种数据误差,但无法根除它。测量数据的误差来自测量设备和测量过程,是必然存在的。即使是上述 那种人为引入的误差也极难根除,因为没有人知道所使用的浮点库、浮点硬件或其他什么代码使用了不同的数学常量。

(3)过程误差

类似不同的测量设备和测量过程产生不同精度的数据,不同的计算过程也会导致结果有不同的精度。例如,在同样的初值条件下解算同一个微分方程,如果使用不同的步长(积分循环次数将不同)或不同的积分公式(例如Runge_Kutta公式常用的就有二阶和四阶两种),得到的结果也有差异。

这种误差的控制和减小要复杂得多,需要使用计算数学方面的理论和具体的算法分析。