一、数值的浮点表示

数值是由 数符+尾数+阶码 来表示的,实际计算机表示的数字一定是离散的,就像下面的图像所示。
数值的离散表示

这样就必然会产生误差。

二、浮点计算特点

加减法:

  • 先对阶(将阶码统一为较大者)
  • 后计算
  • 再舍入

乘除法:

  • 先运算
  • 再舍入

不在计算机数系的数做四舍五入(注意不是截断)

三、减小误差的技巧:

1、相近不减

非常接近的数相减,会损失有效数字
如: 212121.4 - 212121.1 = 0.3
两个有效数字为7的数字相减,结果的有效数字为1

如何避免相近的数相减呢?
例:
计算,,故答案为

但是,从另一个角度,

后一种做法精度更高。
精确解是0.041739….

2、悬殊不加

数量级差太大的数尽量避免做加法(会导致大数吃小数)

3、太小不乘、太小不除

(会出现答案过大或者过小,导致精度降低)

四、控制误差的传播

迭代推导
方案1是从左往右迭代,方案2是从右往左迭代。

迭代结果图示:
方法1:
方案1
方案2

五、算法设计的优劣标准

  • 1、误差大小
  • 2、收敛性
  • 3、稳定性
    所谓稳定性:一个算法,如果初始值有小的舍入误差,而计算过程的舍入误差不增长,则称此算法为数值稳定的;否则称数值不稳定的或算法病态的。根据稳定性的定义:判断一个算法(不)稳定,关键是要推导出误差的传播公式,若误差在计算过程中变大则不稳定,否则是稳定的。

六、误差来源

误差来源

绝对误差/绝对误差限/相对误差/相对误差限

设x是准确值,x’为x的一个近似值,e’ = x’ - x,e’就是绝对误差

如果所有的误差e’, |e’|≤a’,则a’就是x’的绝对误差限,简称误差限

相对误差/相对误差限就是在其基础上除以x’

七、 误差分析

将带有误差的数据进行计算时,误差在运算过程中会进行传播,必然导致计算结果出现误差。一般来说,精确值x与近似值x*之间都比较接近,其误差可以看作是一个小的增量,即可以把误差看作微分,即

误差的计算也就可以参照积分微分规则
误差来源

以上的误差计算没有考虑自变量的误差,更一般的情况是,自变量也会产生误差。自变量的误差导致的函数值误差由泰勒公式导出。

误差来源
乘以一个导数f’(x’)应该就可以。

八、误差分析例题

1、

已知,
由于的精确值未知,取其为1.414,试问下列三个表达式哪个计算精度最高?

误差来源
感觉:导数值尽量小,误差也会随之变小。(是这样吗?)

2、

回到刚才的迭代问题:
迭代误差的传播

为什么方案1误差这么大呢?
方案1在迭代时,导数依次乘以1、2、3、4、误差呈阶乘式增长

方案2的导数就很小。