灾难性抵消

在数值分析中，灾难性抵消（）是指两个大小相近的数值的近似值相减，得到的差值可能和原始数值相减得到的真实的差值有很大差异，因而近似值的差值不能用作真实值差值的近似值。

例如，如果有两个螺柱，一个长，另一个长，用厘米刻度的尺子测量其长度，得到的近似值为和。在相对误差方面，它们是真实长度的良好的近似值：近似值的误差小于真实长度的2%，即 。

但是，如果用这些近似长度相减，则差值为，而长度之间的真实差值是。用近似值算出的差，和用真实值算出的差相比，偏离了100%。

即使差值计算本身是精确的，灾难性抵消仍然有可能发生，如上例所示——它不是哪种类型的运算（如浮点运算）的属性；当输入值本身是近似值时，进行减法运算就必有灾难性抵消。实际上，根据，浮点运算中，当输入值足够接近时，浮点差可以精确计算——浮点减法运算本身并未引入捨入誤差。

 形式分析 
形式上，发生灾难性抵消是因为减法运算对邻近数值的输入是病态的：即使近似值和与真实值和 相比，相对误差和不大，近似值差的与真实值差相对误差也会与真实值差成反比：



因此，两个近似值的精确差值与真实数字差值的相对误差为：



如果真实输入和很接近，结果可能会非常大。

参考文献

Category:数值分析